Vue.js 官方文档摘记 计算属性
2017-06-16 14:08
766 查看
计算属性
计算属性
这里的计算表示的是名词,代表computed选项,被中文翻译到“计算属性”。
这里是关于该选项的资料
可以看作是使用Vue来修改文档中的模板。
基础例子
<div id='example1'> <p>这里是基础的模本:{{message}}</p> <p>这里是使用计算属性修改的内容:{{reversedMessage}}</p> </div>
下面是Vue代码
var vm=new Vue({ el:"#example", data:{message:"模板渲染内容"}, computed:{ reversedMessage:function(){ return this.message+"this表示该vm对象本身"; } } });
computed的缓存 vs Methods
下面用到的methods也是Vue的一个属性,关于该属性的资料看这里。
上面的功能,也可以使用
methods方法进行修改,内容如下:
var vm=new Vue({ el:"#example", data:{message:"这里还是一样的"}, methods:{ reversedMessage:function(){ return this.message+"这里是使用methods方法实现的"; } } });
不过上面不能使用模板语法的方式来调用了,而是要修改成这样的形式:
<p>{{ reversedMessage() }}</p>
可以看到这里像调用函数一样,调用了
methods里面的方法。两种实现方法实现了相同的功能,那么本质上有什么区别呢?区别在与缓存。
computed,上面的例子中,reversedMessage与message是绑定在一起的,如果message发生改变,则reversedMessage也会重新计算,如果message不发生改变,则会直接读取上次的缓存值
methods,则是每次都是按照计算方法计算新的值
看你需求了,用哪个。
computed属性 vs Watch属性
watch属性资料使用该属性可以监视Vue实例上数据的发生改变,所以也可以通过他来设置相应的值,但是其与
computed属性的区别,文档里面只是给了一个例子:
<div id='example2'>{{fullName}}</div>
var vm=new Vue({ el:"#example2", data:{ firstName:"FirstName", lastName:"LastName", fullName:"FirstName LastName" }, watch:{ firstName:function(val){ this.fullName=val+this.lastName; }, lastName:function(val){ this.fullName=this.firstName+val; } } });
但是使用
computed方法:
var vm=new Vue({ el:"#example2", data:{ firstName:"FirstName", lastName:"LastName" }, computed:{ fullName:function(){ return this.firstName+this.lastName; } } });
如果说上面的两个方法有什么区别的话,那么我个人感觉是
computed方法不需要管外部数据,只需要关注如何提交一个结果,而不像
watch需要关注是那个对象触发了改变。
computed的set
computed属性默认是只有
get,但是也支持设置
set。
var vm=new Vue({ fullName:{ get:function(){ return "外部调用vm.fullName使就会得到该数据"; }, set:function(value){ this.fullName=value; } } });
这样当外部调用
vm.fullName='FirstName LastName'时,就会自动调用
set后面的函数。
观察 watchers
这个例子是为了说明watch这个属性的好处。
<div id='example3'> <p>在下面输入一个问题,会调用一个api进行查询和回答: <input v-model='question'> </p> <p>{{answer}}</p> </div>
<script src="https://unpkg.com/lodash@4.13.1/lodash.min.js"></script> var watcherExampleVM=new Vue({ el:"#example3", data:{ question:"", answer:"先输入内容,然后才能得到结果。" }, watch:{ question:function(newQuestion){ this.answer="等待输入完成", this.getAnswer() } }, methods:function(){ getAnswer:_.debounce( function(){ var vm=this; if(this.question.indexOf("?")===-1){ vm.answer="结尾一定要带 ? "; return; } vm.answer="Thinking..."; axios.get("https://yesno.wtf/api") .then(function(response){ vm.answer=_.capitalize(response.data.answer); }) .catch(function(error){ vm.answer="API调用失败"; }) } ),500 } });
首先上面那段代码我看不太懂,因为有调用一个新的js框架:Lodash,但是上面那段代码的意思就是,与
computed相比,
watch能提供更加丰富的内容显示。
相关文章推荐
- Vue.js 官方文档摘记:Vue 实例
- Vue.js官方文档摘记
- Vue.js 官方文档摘记 class和style绑定
- Vue.js 官方文档摘记:模板语法
- Vue.js计算属性
- Vue.js基本规则提炼总结及计算属性学习
- Vue.js学习之计算属性
- vue.js计算属性setter
- Vue.js之计算属性computed与$watch
- Vue.js第三天学习笔记(计算属性computed)
- Vuejs——(3)计算属性,样式和类绑定
- Vue.js学习 Item5 -- 计算属性computed与$watch
- vue.js计算属性
- Vue.js 官方文档较绕的地方总结 ——boolan
- Vue.js 学习(4) -- 计算属性和Watchers
- vuejs教程3-计算属性
- Vue.js每天必学之计算属性computed与$watch
- vue.js入门教程之计算属性
- Vue.js笔记-计算属性 class与style绑定
- vue.js 计算属性$watch