![Vue.js从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/987/44509987/b_44509987.jpg)
上QQ阅读APP看书,第一时间看更新
4.1.2 方法
![](https://epubservercos.yuewen.com/CC45E5/23721548909464406/epubprivate/OEBPS/Images/Figure-P63_7212.jpg?sign=1739271625-xYZAxneuzd88iEI0uvDSCtQBGiOdwHve-0-4745c2bbbbe855b7dd9d8fa2c3d4abc1)
methods:通过methods对象定义方法,并使用v-on指令来监听DOM事件。
<button v-on:click="alert">alert</button> new Vue({ el: '#app', data:{ a:1 }, methods:{ alert:function(){ alert(this.a) } } })
自定义事件在初始化的时候传入events对象,通过实例的$emit方法进行触发。而在Vue.js 2.0中则废除了events选项属性,不再支持事件广播这类特性,所以直接使用Vue实例的全局方法$on/$emit(),或者使用插件Vuex来处理即可。
通过调用表达式中的methods也可以达到同样的效果。代码如下:
提示:不应该使用箭头函数来定义methods函数。
![](https://epubservercos.yuewen.com/CC45E5/23721548909464406/epubprivate/OEBPS/Images/Figure-P64_53014.jpg?sign=1739271625-SXQhQeYT6Y3OF96d62kRQiYrDoF4Whc7-0-731c2da2b75c59867e7239d6b4828f4d)
运行的效果如图4-3所示。
![](https://epubservercos.yuewen.com/CC45E5/23721548909464406/epubprivate/OEBPS/Images/Figure-P64_7350.jpg?sign=1739271625-t5gOnzs6gbhEIOWkGbNSrzrzp8ODr2Tj-0-a3c42cf019f6a04d0bd17c180ba9116f)
图4-3 methods运行效果图(一)
从最终的结果来看,两种方式确实是相同的。然而不同的是,计算属性是基于它们的依赖进行缓存的。计算属性只有在它的相关依赖发生改变时才会重新求值。这意味着,只要message还没有发生改变,多次访问reversedMessage计算属性会立即返回以前的计算结果,而不必再次执行函数。相比而言,只要发生重新渲染,methods调用总会执行该函数。
代码如下:
![](https://epubservercos.yuewen.com/CC45E5/23721548909464406/epubprivate/OEBPS/Images/Figure-P64_53016.jpg?sign=1739271625-mAXJp3XCVQAhlsfjI8FsihNJFQPoeWig-0-b7ce0c662464a0a9421a460a29c1a119)
运行的效果如图4-4所示。
![](https://epubservercos.yuewen.com/CC45E5/23721548909464406/epubprivate/OEBPS/Images/Figure-P65_7547.jpg?sign=1739271625-egvSw5wKCy8ibwLgQO2v6H15Wg9Fhobq-0-22fc696159e8f9a45a8a6f8ed5075424)
图4-4 methods运行效果图(二)
提示:假设有一个性能开销比较大的商城A,它需要遍历一个极大的数组和做大量的计算,来获取可能存在的其他商品(赖于A)。如果没有缓存,将不可避免地多次执行A的getter。如果不希望有缓存,则可以用methods替代。