Vue实例
类似js声明变量
var vm = new Vue({
// 选项
})
//会使用 vm (ViewModel 的缩写) 这个变量名表示 Vue 实例
数据与方法
创建完实例后,data 对象中的所有的 property 加入到 Vue 的响应式系统中
var data = { a: 1 } // 设置对象a的值为1
var vm = new Vue({
data: data
}) // 一个Vue实例中,后面的data是表示上面那个
// 获得这个实例上的 property(中文翻译财产)
// 返回源数据中对应的字段
vm.a == data.a // => true(就是说这两个值是相等的)
// 设置 property 也会影响到原始数据
vm.a = 2 //将这个值设置成2
data.a // => 2(这个值也会变成2)
// ……反之亦然
data.a = 3
vm.a // => 3
注意:只有当实例被创建时就已经存在于 data 中的 property 才是响应式的
后添加的将不会响应:
vm.b = 'hi' 完全没反应
技巧:
你知道你会在晚些时候需要一个 property,但是一开始它为空或不存在,那么你仅需要设置一些初始值(就是先声明了,然后用的时候直接用)
data: {
newTodoText: '',
visitCount: 0,
hideCompletedTodos: false,
todos: [],
error: null
}
Object.freeze()会阻止修改现有的 property,就是更新不好使了,不响应了
var obj = {
foo: 'bar'
}
Object.freeze(obj) //在中间将这个冻结了,就不会更新了
new Vue({
el: '#app',
data: obj
})
Vue 实例还暴露了一些有用的实例 property 与方法。它们都有前缀 $,以便与用户定义的 property 区分开来(带美元符号的是Vue自定义好的方法)
var data = { a: 1 }
var vm = new Vue({
el: '#example',
data: data
})
vm.$data === data // => true 一样,随便加
vm.$el === document.getElementById('example') // => true
// $watch 是一个实例方法
vm.$watch('a', function (newValue, oldValue) {
// 这个回调将在 `vm.a` 改变后调用
})
生命周期钩子的函数
比如 created 钩子可以用来在一个实例被创建之后执行代码:
new Vue({
data: {
a: 1
},
created: function () {
// `this` 指向 vm 实例
console.log('a is: ' + this.a) //this.a相当于vm.a
}
})
// => "a is: 1"
生命周期钩子的 this 上下文指向调用它的 Vue 实例。
不要在选项 property 或回调上使用箭头函数
比如
created: () => console.log(this.a)
或
vm.$watch('a', newValue => this.myMethod())。
因为箭头函数并没有 this,
this 会作为变量一直向上级词法作用域查找,直至找到为止,经常导致
Uncaught TypeError: Cannot read property of undefined
或
Uncaught TypeError: this.myMethod is not a function
之类的错误。