vuewatchimmediate:true
Vue中的watch选项允许我们监听Vue实例中的数据变化,并在数据变化时执行相应的操作。默认情况下,当数据发生变化时,watch函数会在下一个事件循环中被调用。但是,我们还可以通过设置`immediate`选项为`true`来立即执行watch函数。
`Vue.watch`具有两个参数:要观察的键路径和回调函数。当指定的键路径上的数据发生变化时,回调函数将被调用。不过,当我们将`immediate`选项设置为`true`时,Vue将先立即调用一次回调函数,即使初始数据没有发生变化。
下面是一个例子来说明`immediate`选项的使用:
```javascript
data() {
return {
name: 'John'
age: 25
}
}
watch: {
name(newVal
oldVal) {
console.log('name changed'
newVal
oldVal)
}
age: {
handler(newVal
oldVal) {
console.log('age changed'
newVal
oldVal)
}
immediate: true
}
}
```
在这个例子中,我们有一个`name`和`age`属性,同时我们在`watch`选项中设置了两个回调函数来监听`name`和`age`属性的变化。对于`age`属性,我们将`immediate`选项设置为`true`,这样回调函数将立即被调用。
当我们初始化Vue实例时,`age`的初始值为25。当监听器被注册时,回调函数会被调用并传入25和undefined作为`newVal`和`oldVal`。然后,在数据变化后,每当`age`发生变化时,回调函数都会被调用。
除了使用`immediate`选项,您还可以在回调函数中使用一个标志来确定是否是初始调用。可以为回调函数添加一个额外的参数,通过检查参数来确定它是否是初始调用。以下是一个示例:
```javascript
data() {
return {
name: 'John'
age: 25
}
}
watch: {
name(newVal
oldVal) {
console.log('name changed'
newVal
oldVal)
}
age(newVal
oldVal) {
if (this.initialAgeChange) {
console.log('age changed (initial)'
newVal
oldVal)
this.initialAgeChange = false
} else {
console.log('age changed'
newVal
oldVal)
}
}
}
mounted() {
this.initialAgeChange = true
}
```
在这个例子中,我们在`mounted`钩子函数中初始化了一个`initialAgeChange`标志,并将其设置为`true`。当`age`属性发生变化时,我们首先检查`initialAgeChange`的值,如果为`true`,则说明是初始调用,否则说明是数据变化后的调用。
总结起来,`immediate`选项允许我们在Vue实例创建时立即调用watch回调函数,而不仅限于在数据变化时调用。这对于一些特殊的需求非常有用,我们可以根据实际情况来选择是否使用。