美文网首页vue
Vue进阶step2-computed(计算属性)

Vue进阶step2-computed(计算属性)

作者: 柴东啊 | 来源:发表于2017-11-28 12:02 被阅读0次

摘要:

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

模板内的表达式是非常便利的,但是他们实际上只用于简答的运算;在模板上放有太多的逻辑会让模板过重难以维护;这就是对于任何复杂的逻辑,你都应该使用计算属性的原因;

接下来我们将computed属性与methods  watch属性进行一些简单的比较;

1:computed属性;

经过处理返回的数据值,只要源数据没有发生改变,computed函数里面对相应的数据就不会反生改变,相当于缓存在本地;发生改变的时候,computed对应数据的函数也会发生改变;

在这里我们声明一个计算属性reversedMessage;我们提供的函数将作为属性vm.reb=versedMessage的getter.

console.log(vm.reversedMessage);

vm.message="Goodbye";

console.log(vm.reversedMessage);

你可以打开浏览器的控制台,自行修改;

HTML部分

origonal message:"{{message}}"

Computed reversed message:"{{reversedMessage}}"

{{now}}

js部分

var vm=new Vue({

el:"#example",//定义作用域

data:{

message:"hello"//存放全局数据;

},

computed:{

//a computed getter ---computed中具有get属性

reversedMessage:function(){

return this.message.split("").reverse().join("");

},//对应上面的reversedMessage属性

now:function(){

return Date.now();

}//Vue提供获取时间的方法---对上面个的now变量;

}

});

2:computed属性和methods属性

你可能已经注意到我们可以通过调用method来达到同样的效果:

我们可以将同一个函数定义为一个method而不是一个计算属性,对于最终的结果,两种方式确实是相同的,

然而,计算属性是基于他们的依赖就行缓存的,计算属性只有在它相关的依赖发生改变时才会重新求值,这意味着只要message 还没有发生改变,多次访问reversedMessage计算属性会立刻返回之前计划算的结果,而不必再次执行函数.这也同样意味着下面的计算属性将不再更新,

相比而言,只要发生重新渲染,method调用总会执行该函数;

我们为什么需要缓存?假设我们有一个性能开销比较大的计划属性A,

它需要便利一个极大的数组和做很大量的计算,然后我们可能尤其他的计算属性依赖A,

如果没有缓存,我们将不可避免的多次执行A的geteer,如果你不希望有缓存,请用methods代替;

因为Date.now()不是响应式依赖;

HTML部分

Reversed message :"{{reversedMessage()}}"

js部分

methods:{

reversedMessage:function(){

return this.message.split("").reverse().join('');

}

};

3:computed属性与watch属性;

vue确实提供了一种更通用的一种方式来观察和响应Vue实例上的数据变动:watch属性;当你有一些数据需要随着其他数据进行便动,你会很容易滥用watch--特别是你之前使用过AngularJS.然后,通常更好的想法就是使用computed属性而不是命令式的watch回调

- 就直接写两这个JS部分代码的比较吧;

通过watch实现对变量的监控

var vm=new Vue({

el:"#demo",

data:{

firstName:"Foo",

lastName:"Bar",

fullName:"foo Bar"

},

watch:{

firstName:function(val){

this.fullName=val+" "+this.lastName

},

lastName:function(val){

this.fullName=this.firstName+" "+val

}

}

});

但是如果要是使用computed来实现这个功能的话;写作如下:

var vm=new Vue({

el:"#demo",

data:{

firstName:"foo",

lastName:"Bar",

fullName:"foo Bar"

},

computed:{

fullName:function(){

get:function(){

return this.firstName+" "+this.lastName;

}

}

}

});

通过比较,computed的优势就出来了;

4:computed中的属性;

计算属性默认只有getter不过在需要时也可以提供一个setter;

var vm=new Vue({

el:"#demo",

data:{

firstName:"foo",

lastName:"Bar",

fullName:"foo Bar"

},

computed:{

fullName:function(){

get:function(){

return this.firstName+" "+this.lastName;

},

setter:function(){

var names=newValue.split('');

this.firstName=names[0];

this.lastName=names[names.length-1]

}

}

}

});

相关文章

网友评论

    本文标题:Vue进阶step2-computed(计算属性)

    本文链接:https://www.haomeiwen.com/subject/guvsbxtx.html