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>