vue 生命周期
数据响应
对象
vue 是通过递归遍历初始数据中的所有属性,并用 object.defineProperty 把它们转化为 getter 和 setter 来实现数据观察的。
如果有一个属性不存在初始数据中,那么就无法观测这个属性;
1 | //对象添加和删除属性 |
数组
变异方法(对下面这些方法进行了拦截,调用这些方法数组会响应):push、pop、shift、unshift、splice、sort、reverse方法
非变异方法:filter、concat、slice
上述方法返回的数组是一个不同的实例,所以要用新数组代替旧数组:
1 | arr = arr.filter(function(index) { |
通过索引修改数组数据,vue 无法侦测到这类操作
1 | //扩展方法 |
数据监视
computed 与 methods
1 | computed: { |
上述代码实现相同的功能
区别:computed 基于它的依赖缓存,依赖不变不会重新取值
methods 每当重新渲染都会执行函数
computed 与 watch
区别:computed 属性用于数据的计算,返回计算后的数据
watch 用于响应数据的变化,执行一些操作,改变数据值,可以无返回值
watch 监视数据的变化,第一个参数为当前数据的值
用于一个数据会根据其他数据变化而变化,多数情况下可以使用 computed 属性代替
1 | data: { |
注意事项
- vue 实例直接代理 data 属性:data.a == vm.a == this.a
- vue 暴露的其他属性方法要加前缀 \$,与 data 属性区分
- v-html 插入的 dom 数据绑定会被忽略
- Mustache 风格不能再 HTML 属性中使用,要换为 v-bind 指令
- 注意在 JavaScript 中对象和数组是引用类型,指向同一个内存空间,如果 prop 是一个对象或数组,在子组件内部改变它会影响父组件的状态。