在官方网站上,对于 watch 有具体的介绍,大家能够去好好考究一下官网文档,上面是我集体对 watch侦听器的总结
什么是watch侦听器?
watch 侦听器: 实质上是一个函数, 监督数据变动, 针对数据的变动做特定的操作.(数据名作为办法名即可
)
(注: 所有的侦听器,都应该被定义在 watch 节点下 )
const vm = new Vue({ el: '#app', data: { username: '' }, watch: { // 监听 username 值的变动 // newVal 是"变动后的新值", oldVal 是"变动之前的旧值" username(newVal. oldVal) { console.log(newVal. oldVal) } }})
immediate 选项
默认状况下,组件在首次加载结束后不会调用 watch 侦听器.若想让 watch 侦听器立刻被调用,则须要用immediate选项.
watch: { username: { // handler 是固定写法,示意当 username 的值变动时,// 主动调用 handler 处理函数 handler: async function (newVal) {if (newVal === '') return const { data: res } = await axios.get('https://www.escook.cn/api/finduser/' + newVal)console.log(res) }, // 示意页面首次渲染好之后,就立刻触发以后的 watch 侦听器 //immediate 选项的默认值是 false //immediate 的作用是: 管制侦听器是否主动触发一次!immediate: true } }
deep 选项
如果 watch 侦听一个对象, 若对象中的属性值产生了变动,则无奈被监听到
.此时须要应用deep 选项
const vm = new Vue({ el: '#app', data: { info: { username: 'admin' } }, watch: { info: { handler(newVal){ console.log(newVal.username) }, deep: true } } })
- 侦听对象单个属性的变动 , 办法如下 : ``` const vm = new Vue({ el: '#app', data: { info: { username: 'admin'} }, //所有的侦听器,都应该被定义到 watch 节点下 watch: { //如果要侦听器对象子属性的变动,则必须包裹一层单引号 'info.username':{ handler(newVal){ console.log(newVal) } } } }) ```
侦听器的格局
1.>办法格局的侦听器
- 毛病1. : 无奈刚进入页面的时候主动触发!
- 毛病2. : 如果侦听的是一个对象,若属性产生了变动 ,不会触发侦听器!
2.>对象格局的侦听器
- 益处1. : 能够通过immediate 选项, 让侦听器主动触发!
- 益处2. : 能够通过deep 选项,让侦听器深度监听对象中的每个属性的变动!