Vue从入门到实战:计算属性缓存
来自CloudWiki
复杂的表达式也可以放到方法中去实现,然后在绑定表达式中调用方法即可。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>计算属性</title> </head> <body> <div id="app"> <p>原始字符串: {{ message }}</p> <p>方法调用后的反转字符串: {{ reversedMessage() }}</p> </div> <script src="vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { message: 'Hello,Vue.js无难事!' }, methods: { reversedMessage: function () { return this.message.split('').reverse().join('') } } }) </script> </body> </html>
既然使用方法能实现与计算属性相同的结果,那么还有必要使用计算属性吗 ?
计算属性是基于它的响应式依赖进行缓存的,只有在计算属性的相关依赖发生改变时才会求值,而如果采用方法,那么不管什么时候访问reversedMessage(),该方法都会被调用。
计算属性的这种缓存特性,在下面这个例子中也有体现:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>计算属性</title> </head> <body> <div id="app"> <p>原始字符串: {{ message }}</p> <p>计算后的反转字符串: {{ reversedMessage }}</p> <p>方法调用后的反转字符串: {{ reversedMessage2() }}</p> </div> <script src="vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { message: 'Hello,Vue.js无难事!' }, computed: { // 计算属性的 getter reversedMessage: function () { alert("计算属性"); return this.message.split('').reverse().join('') } }, methods: { reversedMessage2: function () { alert("方法"); return this.message.split('').reverse().join('') } } }) let msg = vm.reversedMessage; msg = vm.reversedMessage2(); </script> </body> </html>