Skip to content

侦听器 ​

本节目标:理解“侦听器”的核心思路,并能把它用于实际开发或面试表达。 ==虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。==

==这就是为什么== ==Vue== ==通过== ==watch== ==选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。==
==例如:==
==<div id====="watch-example"====>======  ==<p>======    ==Ask a yes/no question:======    ==<input v-model====="question"====>======  ==</p>======  ==<p>===={{ answer }}====</p>========</div>==
==<!--== ==因为== ==AJAX== ==库和通用工具的生态已经相当丰富,====Vue== ==核心代码没有重复== ==-->========<!--== ==提供这些功能以保持精简。这也可以让你自由选择自己更熟悉的工具。== ==-->========<script src====="https://cdn.jsdelivr.net/npm/axios@0.12.0/dist/axios.min.js"====></script>========<script src====="https://cdn.jsdelivr.net/npm/lodash@4.13.1/lodash.min.js"====></script>========<script>========var== ==watchExampleVM === ==new== ==Vue({======  ==el:== =='#watch-example'====,======  ==data: {======    ==question:== ==''====,======    ==answer:== =='I cannot give you an answer until you ask a question!'======  ==},======  ==watch: {======    ==//== ==如果== ==`question`== ==发生改变,这个函数就会运行======    ==question:== ==function== ==(newQuestion, oldQuestion) {======      ==this====.answer === =='Waiting for you to stop typing...'======      ==this====.debouncedGetAnswer()======    ==}======  ==},======  ==created:== ==function== ==() {======    ==// `_.debounce`== ==是一个通过== ==Lodash== ==限制操作频率的函数。======    ==//== ==在这个例子中,我们希望限制访问== ==yesno.wtf/api== ==的频率======    ==// AJAX== ==请求直到用户输入完毕才会发出。想要了解更多关于======    ==// `_.debounce`== ==函数== ==(====及其近亲== ==`_.throttle`)== ==的知识,======    ==//== ==请参考:====https://lodash.com/docs#debounce======    ==this====.debouncedGetAnswer = _.debounce(====this====.getAnswer,== ==500====)======  ==},======  ==methods: {======    ==getAnswer:== ==function== ==() {======      ==if== ==(====this====.question.indexOf(===='?'====) ===== ==-1====) {======        ==this====.answer === =='Questions usually contain a question mark. ;-)'======        ==return======      ==}======      ==this====.answer === =='Thinking...'======      ==var== ==vm === ==this======      ==axios.get(===='https://yesno.wtf/api'====)======        ==.then(====function== ==(response) {======          ==vm.answer = _.capitalize(response.data.answer)======        ==})======        ==.catch(====function== ==(error) {======          ==vm.answer === =='Error! Could not reach the API. '== ==+ error======        ==})======    ==}======  ==}========})========</script>==
==结果:==
Ask a yes/no question:
I cannot give you an answer until you ask a question!
==在这个示例中,使用== ==watch== ==选项允许我们执行异步操作== ==(====访问一个== ==API)====,限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。==
==除了== ==watch== ==选项之外,您还可以使用命令式的== ==vm.$watch API====。==

> 来自

 <https://cn.vuejs.org/v2/guide/computed.html>

本站总访问 — 次