vue指令03---computed计算属性/监听器watch
1. 计算属性computed 的说明:
计算属性computed是根据data中自己已有的属性 计算得到的一个新的属性,创建计算属性,通过computed关键字 他是一个对象,计算属性是基于他们的以来进行缓存的,computed 对象里面是计算属性,它是一个函数 但是可以当做属性来使用
实例如下:
1 computed: { 2 // 这里的fullName就是一个计算属性 它是一个函数 但是可以当做属性来使用 3 fullName(){ 4 return this.firstName + this.lastName 5 } 6 }
整体代码如下:
1 <body> 2 <div id="app"> 3 <input type="text" v-model="firstName"> 4 <input type="text" v-model="lastName"> 5 <!-- 这样写不好 这样使得模板逻辑变得厚重 不易维护 --> 6 <div>全名:{{ firstName + lastName }}</div> 7 <h1>使用computed</h1> 8 <div>全名:{{fullName}}</div> 9 10 </div> 11 <script> 12 //计算属性computed是根据data中自己已有的属性 计算得到的一个新的属性 13 var vm = new Vue({ 14 el: '#app', 15 data: { 16 firstName: '', 17 lastName: '' 18 }, 19 //创建计算属性,通过computed关键字 他是一个对象,计算属性是基于他们的以来进行缓存的 20 computed: { 21 // 这里的fullName就是一个计算属性 它是一个函数 但是可以当做属性来使用 22 fullName(){ 23 return this.firstName + this.lastName 24 } 25 } 26 }) 27 </script> 28 </body>
页面展示:
2.监听器 watch
watch属性的说明:watch 监听器用来监听data中数据的值,只要监听到的数据一发生变化,他就能执行相应的函数。 创建监听器通过 watch 属性,它是一个对象,对象里面和 computed 一样也是函数,但是这里面的函数名很特殊,它必须是你要监听的data中的数据的名,这个函数包含两个参数,一个是newVal ,一个是oldVal
示例如下:
1 watch: { 2 //监听firstName 3 firstName(newVal, oldVal){ 4 this.watchFullName = newVal + this.lastName 5 }, 6 //监听lastName 7 lastName(newVal, oldVal){ 8 this.watchFullName = this.firstName + newVal 9 } 10 }
整体代码实例:
1 <body> 2 <div id="app"> 3 <input type="text" v-model="firstName"> 4 <input type="text" v-model="lastName"> 5 <!-- 这样写不好 这样使得模板逻辑变得厚重 不易维护 --> 6 <div>全名:{{ firstName + lastName }}</div> 7 <h1>使用computed</h1> 8 <div>全名:{{fullName}}</div> 9 <h1>使用watch</h1> 10 <div>全名:{{watchFullName}}</div> 11 12 </div> 13 <script> 14 //计算属性computed是根据data中自己已有的属性 计算得到的一个新的属性 15 var vm = new Vue({ 16 el: '#app', 17 data: { 18 firstName: '', 19 lastName: '', 20 watchFullName: '' 21 }, 22 //创建计算属性,通过computed关键字 他是一个对象,计算属性是基于他们的以来进行缓存的 23 computed: { 24 // 这里的fullName就是一个计算属性 它是一个函数 但是可以当做属性来使用 25 fullName(){ 26 return this.firstName + this.lastName 27 } 28 }, 29 //创建监听器通过 watch 属性,它是一个对象,对象里面和 computed 一样也是函数,但是这里面的函数名很特殊,它必须是你要监听的data中的数据的名,这个函数包含两个参数,一个是newVal ,一个是oldVal 30 watch: { 31 //监听firstName 32 firstName(newVal, oldVal){ 33 this.watchFullName = newVal + this.lastName 34 }, 35 //监听lastName 36 lastName(newVal, oldVal){ 37 this.watchFullName = this.firstName + newVal 38 } 39 } 40 }) 41 </script> 42 </body>
页面显示:
3. 深度监听
深度监听 watch 对象里面不再是一个函数,而是一个被监听的对象,它里面包含 一个handler 函数 和一个属性 deep:true 的属性,而且handler的函数名是固定,不能改变
示例代码:
1 watch: { 2 //监听对象的时候不再能使用一下这种方法 要使用深度监听 3 // user(newVal, oldVal){ 4 // console.log('改变了') 5 // } 6 user: { 7 //hander这个函数名是固定不该改变的 8 handler(newval){ 9 console.log('改变了'); 10 console.log(newval.name); 11 }, 12 //deep: true 表示深度监听 13 deep: true 14 } 15 }
整体代码实例:
<body> <div id="app"> <input type="text" v-model="user.name"> </div> <script> var vm = new Vue({ el: '#app', data: { user: { name: 'jack', } }, watch: { //监听对象的时候不再能使用一下这种方法 要使用深度监听 // user(newVal, oldVal){ // console.log('改变了') // } user: { //hander这个函数名是固定不该改变的 handler(newval){ console.log('改变了'); console.log(newval.name); }, //deep: true 表示深度监听 deep: true } } }) </script>
页面改变前后:
注意:在实际开发中 能用computed实现的就用computed实现, 需要执行一步操作的时候就要用到watch。