计算属性和侦听器
如果一个属性是依赖于其他属性变化的 使用 computed 计算属性
- watch 监视属性 当属性发生变化时触发 必须在 data 中已经声明(可以异步操作)
- 写成函数 相当于直接调用 handler 函数
- 写成对象 只有当监视的属性值发生改变时,handler 函数才会执行,可以设置属性; 添加 immediate:true 属性, 可以立即执行handler 函数; deep:true 属性,深层次监控
- computed 计算属性 不能在 data 中声明过 每一个计算属性都有 get,set 方法(不能异步操作) 依赖属性发生改变 则计算属性发生改变,若没有改变 则直接从缓存中读取之前的值,不会重新渲染。
- 写成函数 相当于调用 get 方法获取值
- 写成对象
<script>let vm = new Vue({el: '#app',data: {// 当 firstName lastName 发生改变时,fullName 的值也跟着更改firstName:'FOO',lastName: 'Bar',// fullName: 'FOO Bar',},watch: {//监视属性 可以异步操作// 函数写法 相当于调用 handler 函数(自带)firstName(newVal, oldVal) {this.fullName = newVal + this.lastName;},lastName(newVal, oldVal) {this.fullName = this.firstName + newVal},// 对象写法firstName: {handler(newVal,oldVal) { //只有当监视的函数值发生改变时,handler 函数才会执行this.fullName = newVal.name + this.lastName;console.log('log')},immediate:true, // 立即执行 handler 函数deep: true, // 深层监控 firstName: {name: {m:foo}},},lastName(newVal, oldVal) {this.fullName = this.firstName.name + newVal}},computed: { // 计算属性 不能在 data 里边声明过,每一个计算属性都有 get set 方法// 函数写法fullName() { // 相当于调用 get 方法获取值// firstNmae lastName 表示 fullName 的依赖属性 依赖属性发生改变 fullName 发生改变,若没有改变 则直接从缓存中读取之前的值,不会重新渲染。return this.firstName + this.lastName;},// 对象写法fullName: {get() { // 先回自动调用 后期依赖值发生改变时,调用return this.firstName + this.lastName;},set(val) { // 对计算属性设置值时调用,并且把设置的值自动保存到 val 中,这个值可以进行其他操作// vm.firstName = 'aaa' // val 保存 aaaconsole.log(val);}},},})</script>
