Vue2

Vue2

Vue2的创建实例

现在来学习Vue2的创建实例,仍然能够帮助我们更加深刻的理解Vue的工作原理

<script src="./vue.js"></script>

<script>
    Vue.config.productionTip = false // 阻止 vue 在启动时生成生产提示
    const vm = new Vue({
        el: "#root",
        data: {
            msg: 'Hello Vue!'
        }
    })
</script>
<script src="./vue.js"></script>

<script>
    Vue.config.productionTip = false // 阻止 vue 在启动时生成生产提示
    const vm = new Vue({
        data: {
            msg: 'Hello Vue!'
        }
    })
    vm.$mount('#root')
</script>

通过html单独引入vue.js的应用模式下,我们可以很清晰的感受到,vue在工作的状态就是将编写好的模板翻译成html语言,实现响应式数据的功能

其中,Vue被导入进来后,作为一个函数存在,且必须要将其实例化为对象才能使用,通过选项对象模式来配置vue对象中的参数

然而,$mount(挂载方法)并不是由vue对象直接提供的,而是通过其原型对象中获取到的(原型链调用)

上面的示例是简介了挂载方式的两种方法:通过el属性配合css选择器的方式,或者是通过$mount方法调用的方式(以上两种方式在vue3中都不可用)

同样的,vue中data属性的赋值也有两种方式:

  • 对象式(组件中调用不适用)
  • 函数式
// 对象式
new Vue({
    data: {
        msg: 'Hello Vue!'
    }
})

// 函数式
new Vue({
    data : function(){
        return {
            msg : 'Hello Vue!'
        }
    }
})

// 函数式(简写)
new Vue({
    data(){
		return {
            msg : 'Hello Vue!'
        }
    }
})

因为箭头函数this指向上级目录的缘故,在vm对象中使用函数式进行配置时都尽量不要使用箭头函数


MVVM

Vue采用了很多MVVM的开发思想,vue对象就是一个vm视图模型,他通过很多操作将模板和数据关联起来,最终实现了数据绑定的效果

数据代理

Object.defineProperty这个方法是js提供的一个Object类的方法,可以为对象增加属性

let person ={
    name : "xiaobai",
    sex : "男",
    //age :18
}

let number = 19

// 通过这个方法为age添加value值
Object.defineProperty(person,'age',{
    value:18,
    enumerable: true, //可枚举,默认是false
    writable:true, //可修改,默认是false
    configurable:true //可删除,默认是false
    
    // 一个回调函数,当此属性被访问的时候执行
    get(){
    	return number
	}
	
	// 一个回调函数,当属性被修改的时候执行
	set(value){
        number = value
    }
})

这样,我们就创建了一个数据代理,则number的值会影响到person对象中age属性的值

在对person.age执行get操作时,会直接返回number

在对person.age执行set操作时,会将number的值设置为新的值

这样number就是person.age对象的数据代理


在vue中,vm对象的data对象就配置成为vm中新增属性的代理,也是通过defineProperty来配置的

在这段代码中,我们通过函数式为vm对象添加了属性msg,并且创建了代理属性data.msg

当使用插值表达式读取msg属性时,直接读取到data.msg属性

当为msg属性修改值时,直接修改data.msg属性

Vue.config.productionTip = false // 阻止 vue 在启动时生成生产提示
const vm = new Vue({
    data(){
        msg: 'Hello Vue!'
    }
})
vm.$mount('#root')