计算属性 , computed 是用来计算出一个值,这个值在调用的时候会根据依赖的数据显示新的计算结果并自动缓存。 若是依赖不变,computed中的值就不会从新计算。 注意 :不须要加(),javascript
模板内的表达式很是便利,可是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板太重且难以维护,例如:html
<div id="example">
{{ message.split('').reverse().join('') }}
</div>
复制代码
在这个地方,模板再也不是简单的声明式逻辑,你必须看一段时间才能意识到,这里是想要显示变量 message
的翻转字符串,当你想要在模板中屡次引用此处的翻转字符串时,就会更加难以处理。vue
因此,对于任何复杂逻辑,都应该使用计算属性java
<body>
<div id="app"> <h2>{{firstName + ' ' + lastName}}</h2> <h2>{{firstName}} {{lastName}}</h2> <h2>{{getFullName()}}</h2> <h2>{{fullName}}</h2> </div>
</body>
<script src="../js/vue.js"></script>
<script> const app = new Vue({ el: '#app', data: { firstName: 'Lron', lastName: 'Man' }, // 推荐使用计算属性来操做,由于它会将这些数据进行缓存, 不管打印多少次,它只会调用一次 computed: { // 计算属性 注意 : 计算的是 属性, // 因此这里面的属性 当作一个 对象(用名词形式来表达), 调用时候不用加小括号 fullName: function () { return this.firstName + ' ' + this.lastName } }, methods: { // 不会缓存, 因此有多少次就调用多少次, 没有 computed 划算 getFullName: function () { return this.firstName + ' ' + this.lastName } } }) </script>
复制代码
参考文档:vue官方文档:watchweb
监听, 若是某个属性依赖变化了就执行回调。 它有俩个属性 1. immediate 表示数据是否在第一次渲染的时候当即执行该函数。 2. deep , 若是咱们监听一个对象(不包括数组),是否要看对象里面的属性的变化。api
watch监听的数据能够是一个 字符串、函数、数组、对象数组
一个对象,键是须要观察的表达式(data内的数据),值是对应回调函数。值也能够是方法名,或者包含选项的对象。缓存
当数据发生改变时,会执行一个回调,它有俩个参数, newVal 和 oldValmarkdown
wtach有俩个属性:app
this.$watch 和 watch 用法一致,只不过写法有些不一样,这里不详细说明
案例:
new Vue({
data: {
n: 0,
obj: {
a: "a"
}
},
template: ` <div> <button @click="n += 1">n+1</button> <button @click="obj.a += 'hi'">obj.a + 'hi'</button> <button @click="obj = {a:'a'}">obj = 新对象</button> </div> `,
watch: {
n() {
console.log("n 变了");
},
obj:{
handler: function (val, oldVal) {
console.log("obj 变了")
},
deep: true // 该属性设定在任何被侦听的对象的 property 改变时都要执行 handler 的回调,不论其被嵌套多深
},
"obj.a":{
handler: function (val, oldVal) {
console.log("obj.a 变了")
},
immediate: true // 该属性设定该回调将会在侦听开始以后被当即调用
}
}
}).$mount("#app");
复制代码