第二篇 动态数据的计算
javaScript表达式直接计算
原字符串:{{message}}
反转后的字符串:{{message.split('').reverse().join('')}}
method方法
-
《{{book.name}}》{{book.number}}本{{book.price}}元/本
总价:{{totalPrice()}}
:{{testCounter}}
- 结论,按钮点击更新后面的数字时,会导致这个组件(#app2)的视图更新,从而引发DOM中的
总价:{ {totalPrice()} }
重新渲染,里面的方法会被调用,价格就要重新计算一遍。如果计算过程复杂就会有性能问题。
- 视图更新依赖DOM上的数据变化,数据不变视图不会更新的。
watch属性
-
《{{book.name}}》{{book.number}}本{{book.price}}元/本
总价:{{totalPrice}}
:{{testCounter}}
- 要监测的目标books写到watch里面,totalPrice就不会被更新dom时调用,而只有books发生变化时才调用。
- 本例中页面加载完后总价格是0,因为此时books没有变动就没有计算,解决方法就是在watch之外(如创建完的钩子函数中)调用。
watch属性异步请求
-
《{{book.name}}》{{book.number}}本{{book.price}}元/本
总价:{{totalPrice}}
- watch具有的异步请求功能,methods方法和computed属性是不具有的。
computed属性实现购物车
-
《{{book.name}}》{{book.number}}本{{book.price}}元/本
总价:{{totalPrice}}
- 把某个变量计算的依赖逻辑作为方法写到computed里面,方法返回计算结果,这样只有方法里的变量有变化时才会计算一次,
- 计算属性必须是一个带返回值的方法。
computed属性的缓存
computed的date: {{date1}}
methods的date: {{date2()}}
computed的date: {{newDate1}}
methods的date: {{newDate2}}
总结
- javaScript表达式,适用于简单计算。
- methods方法,适用于复杂计算,但页面的重新渲染会导致方法重新调用而影响性能。
- watch属性,比起methods属性,可以为特定目标的变动而调用特定方法,有异步功能,但目标有多个时更适合用computed属性。
- computed属性,可以为多个依赖的目标设定被调函数,还有缓存机制,有get/set方法,官方比较推荐。
- 不同场景应用不同方法,不能一概而论。