为什么this.scode会在计算属性会被打印2次,一次是undifind 后来才是4.2

来源:16-13 详情弹层页(4)- star组件使用

qq_里_1

2017-10-25

computed: {
 starSize () {
   return 'star-' + this.size
 },
 itemClasses () {
   console.log(this.scode)
   let result = []
   let staron = Math.floor(this.scode)
   for (let i = 0; i < staron.length; i++) {
     result.push(starOn)
   }
   if (this.scode !== Math.floor(this.scode)) {
     result.push(starHalf)
   }
   while (result.length < LENGTH) {
     result.push(starOff)
   }
   return result
 }

写回答

2回答

ustbhuangyi

2017-10-26

因为它的初始值就是 undefined,数据请求到才会有值。

0
5
qq_里_1
好吧,感谢老师和上面同学的回答,理解了。那个单词打错 已改,
2017-10-26
共5条回复

小白师兄

2017-10-26

1、先理解一句话,Vue的计算属性依赖于数据属性的改变,对于依赖属性的任何改变都会触发计算属性的逻辑;

2、也就是说,只要在data属性中,scode改变(分数应该叫score吧,不知道你为啥叫做scode),就会触发computed计算属性,而data中scode的值默认是未指定的,因此,第一次加载就会输出undefined;

3、再来说为啥输出4.2,当视图加载,从后台获取到scode的值后(4.2),data中scode值从undefined变成了4.2,计算属性就又会相应scode的值的变化,将它更改成4.2,所以又会打印出最终的4.2值;

4、总结一下就是,计算属性执行了两边,第一遍是默认为undefined的时候,第二次是获取到4.2的时候;

5、你如果想验证可以在data中默认给scode一个值,比如1,那么页面就会输出两次,一次1,一次4.2;如果你默认给4.2,那么就只会输出一次4.2,而不是两次;

0
1
qq_里_1
说的很好,很感谢
2017-10-26
共1条回复

Vue.js2.5+cube-ui重构饿了么App(经典再升级)

掌握Vue1.0到2.0再到2.5最全版本应用与迭代,打造极致流畅的WebApp

9868 学习 · 4162 问题

查看课程