computed
用于处理一些复杂逻辑
实例-反转字符
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>Vue计算属性</title><script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script></head><body><div id="app"><p>原始: {{ message }}</p><p>反转: {{ reversedMessage }}</p></div><script>var vm = new Vue({el: "#app",data: {message: "谁啊,咋了!咋了,谁啊",},computed: {// 计算属性的 getterreversedMessage: function () {// `this` 指向 vm 实例return this.message.split("").reverse().join("");},},});</script></body></html>
computed 对比 methods
两者效果一样,但computed基于它的依赖缓存,只有相关依赖发生改变才会重新取值。 而使用methods,在重新渲染的时候,函数会重新调用。 可以说computed性能会更好,但是,如果不希望使用缓存,可以使用methods属性。
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>Vue 测试实例 - 菜鸟教程(runoob.com)</title><script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script></head><body><div id="app"><p>原始: {{ message }}</p><p>计算: {{ reversedMessage }}</p><p>方法: {{ reversedMessage2() }}</p></div><script>var vm = new Vue({el: "#app",data: {message: "www.4399.com",},computed: {// 计算属性的 getterreversedMessage: function () {// `this` 指向 vm 实例return this.message.split("").reverse().join("");},},methods: {reversedMessage2: function () {return this.message.split("").reverse().join("");},},});</script></body></html>
计算属性的 setter
计算属性默认只有getter,不过在需要的时候也可以提供一个setter
实例1
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>Vue 测试实例 - 菜鸟教程(runoob.com)</title><script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script></head><body><div id="app"><p>{{ site }}</p></div><script>var vm = new Vue({el: "#app",data: {name: "Google",url: "http://www.google.com",},computed: {site: {// getterget: function () {return this.name + " " + this.url;},// setterset: function (newValue) {var names = newValue.split(" ");this.name = names[0];this.url = names[names.length - 1];},},},});// 调用 setter, vm.name 和 vm.url 也会被对应更新vm.site = "猪脚饭 http://www.runoob.com";document.write("name: " + vm.name);document.write("<br>");document.write("url: " + vm.url);</script></body></html>
实例2
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>计算属性的setter和getter</title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><div id="app">{{ fullName }}</div><script>var vm = new Vue({el: "#app",data: {firstName: "Alex",lastName: "Xu",},computed: {fullName: {get: function () {return this.firstName + " " + this.lastName;},set: function (value) {var arr = value.split(" ");this.firstName = arr[0];this.lastName = arr[1];},},},});// vm.firstName="八嘎"</script></body></html>
