watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作
布局代码
vue代码
const vm = new Vue({el: '#app',data: {username: ''},// 所有的侦听器,都应该被定义到 watch 节点下watch: {// 新值在前,旧值在后username(newVal,oldVal){console.log(newVal,oldVal)}}
})
监听 username 值的变化,并使用 axios 发起 Ajax 请求,检测当前输入的用户名是否可用
const vm = new Vue({el: '#app',data: {username: ''},watch: {async username(newVal) {if (newVal === '') return// 1. 调用 jQuery 中的 Ajax 发起请求,判断 newVal 是否被占用!!!$.get('https://www.escook.cn/api/finduser/' + newVal, function (result) {console.log(result)})}}})
const vm = new Vue({el: '#app',data: {username: 'admin'},watch: {username: {handler(newVal, oldVal) {console.log(newVal, oldVal)},// immediate 选项的默认值是 falseimmediate: true}}})
布局代码
vue代码
const vm = new Vue({el: '#app',data: {// 用户的信息对象info: {username: 'admin',},watch: {info: {handler(newVal) {console.log(newVal)},deep: true} }})
如果只想监听对象中单个属性的变化,则可以按照如下的方式定义 watch 侦听器
布局代码
vue代码
const vm = new Vue({el: '#app',data: {// 用户的信息对象info: {username: 'admin',}},watch: {// 如果要侦听的是对象的子属性的变化,则必须包裹一层单引号'info.username'(newVal) {console.log(newVal)}}})