Data
每个 Vue 实例都会代理其 data 对象里所有的属性,相当于 React 中的 State
data
注意:data 必须是函数,这里的 data 只是一个特殊的原始属性
var data = { a: 1 }
var vm = new Vue({
data: data
})
vm.a === data.a // -> true
// 设置属性也会影响到原始数据
vm.a = 2
data.a // -> 2
// ... 反之亦然
data.a = 3
vm.a // -> 3
注意只有这些被代理的属性是响应的,也就是说值的任何改变都是触发视图的重新渲染。如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。我们将在后面详细讨论响应系统。
除了 data 属性,Vue 实例暴露了一些有用的实例属性与方法。这些属性与方法都有前缀 $
,以便与代理的 data 属性区分。例如:
var data = { a: 1 }Properties and Methods
var vm = new Vue({
el: '#example',
data: data
})
vm.$data === data // -> true
vm.$el === document.getElementById('example') // -> true
// $watch 是一个实例方法
vm.$watch('a', function (newVal, oldVal) {
// 这个回调将在 `vm.a` 改变后调用
})
注意:不要在实例属性或者回调函数中使用箭头函数,因为箭头函数绑定父级上下文,所以 this 不会像预想的一样指向 Vue 实例
vm.$watch('a', newVal => this.myMethod())
// this.myMethod 会是一个 undefined
使用
data 数据写在 vue 实例里面,类型是一个 Function
<script>
export default {
name: 'comment-box',
data: () => ({
comments: [
{ text: 'hello git' },
{ text: 'hello vuejs' }
]
})
}
</script>
选项/数据
data
类型: Object | Function
限制: 组件的定义只接受 function。
详细:
Vue的实例的数据对象 data 我们已经用了很多了,数据绑定离不开 data 里面的数据,也是Vue的核心属性
它是Vue绑定数据到HTML标签的数据源泉,另外Vue框架会自动监视data里面的数据变化,自动更新数据到HTML标签上去
注意:因为箭头函数绑定了父级作用域的上下文,所以 this 指向不会指向 vue 实例
data: () => { return { a: this.myProp }}
// this.myProp 将会是 undefined
computed
将需要运算的 data 数据放在 computed 上,然后进行渲染
类型:
{ [key: string]: Function | { get: Function, set: Function } }
详细: 计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例
小例子:
export default {
name: 'comment-box',
data: () => ({
comments: [
{ text: 'hello git' },
{ text: 'hello vuejs' }
]
}),
computed: {
reversedMessage: function () {
return this.comments.slice().reverse()
}
}
}
注意:因为箭头函数绑定了父级作用域的上下文,所以 this 指向不会指向 vue 实例
计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。注意,如果实例范畴之外的依赖 (比如非响应式的 not reactive) 是不会触发计算属性更新的
methods
添加方法,将方法写在 methods 中
类型:
{ [key: string]: Function }
详细: methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例
小例子:
var vm = new Vue({
data: { a: 1 },
methods: {
plus: function () {
this.a++
}
}
})
vm.plus()
vm.a // 2
注意:不应该使用箭头函数来定义 method 函数 箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例
声明式渲染
Vue.js 的核心是一个允许采用简洁的模板语法来声明式的将数据渲染进 DOM
数据绑定最常见的形式就是使用 “Mustache” 语法(双大括号)的文本插值:
<template>
<div class="comment-box">
{{ comment.text }}
</div>
</template>
Mustache 标签将会被替代为对应数据对象上 comment.text 属性的值。无论何时,绑定的数据对象上 comment.text 属性发生了改变,插值处的内容都会更新