侦听器
基本用法
Watch侦听器允许开发者监视数据变化,从而针对数据的变化做出特定的操作。
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <body> <div id='app'> </div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> const vm = new Vue({ el: '#app', data: { username: '' }, watch: { username(newVal, oldVal) { console.log(newVal, oldVal) } } }) </script> </body>
|
监听器使用axios发起Ajax请求
1 2 3 4 5 6 7 8
| watch: { async username(newVal) { if(newVal === '') return const { data: res } = await axios.get('http://xxxx/' + newVal) console.log(res) } }
|
默认情况下,组件初次加载完毕不会调用watch侦听器,如果想让watch侦听器立即被调用,需要使用immediata选项。
1 2 3 4 5 6 7 8 9 10 11 12
| watch: { username: { handler: async function(newVal){ if(newVal === '') return const { data: res } = await axios.get('http://xxxx/' + newVal) console.log(res) }, immediate: true } }
|
deep选项
如果watch侦听一个对象,对象的属性值发生变化,无法被监听到。
此时,需要使用deep选项来监听对象属性的变化。
1 2 3 4 5 6 7 8 9 10 11
| watch: { username: { handler(newVal){ console.log(newVal.username) }, immediate: true deep: true } }
|
监听对象指定属性
如果只想监听对象中单个属性的变化,可以按照如下方式定义watch侦听器:
1 2 3 4 5 6 7 8 9 10 11 12 13
| const vm = new Vue({ el: '#app', data: { info: { username: 'admin' } }, watch: { 'info.username': { handler(newVal) { console.log(newVal) } } } })
|