vm.$watch
vm.$watch( expOrFn, callback, [options] )
vm.$watch( expOrFn, callback, [options] )
Аргументы:
{string | Function} expOrFn
{Function | Object} callback
{Object} [options]
{boolean} deep
{boolean} immediate
Возвращает: {Function} unwatch
Использование:
Запускает наблюдение за выражением или вычисляемой функцией на предмет изменений. В параметры коллбэка будут переданы новое и старое значения отслеживаемого объекта. Выражение может быть только простым путём до переменной с разделителями-точками. Для более сложных случаев используйте функцию.
Обратите внимание: когда изменяете (а не заменяете) объект или массив, старое и новое значения при вызове коллбэка будут совпадать, так как они ссылаются на один и тот же объект или массив. Vue не сохраняет копии объекта на момент, предшествовавший изменениям.
Пример:
// следим за переменной, указанной путём:
vm.$watch('a.b.c', function (newVal, oldVal) {
// переменная изменилась, сделайте что-нибудь
})
// следим за функцией:
vm.$watch(
function () {
// Данный обработчик будет вызываться каждый раз, когда выражение
// `this.a + this.b` даёт результат. Это похоже на отслеживание
// вычисляемого свойства без определения самого вычисляемого свойства
return this.a + this.b
},
function (newVal, oldVal) {
// значение функции изменилось, сделайте что-нибудь
}
)
vm.$watch
возвращает функцию unwatch, которая останавливает слежение:
const unwatch = vm.$watch('a', cb)
// позднее, останавливаем слежение:
unwatch()
Опция: deep
Чтобы слежение реагировало на изменения во вложенных объектах, передайте deep: true
в объекте параметров. Обратите внимание, что для наблюдения за изменениями массивов этого не требуется.
vm.$watch('someObject', callback, {
deep: true
})
vm.someObject.nestedValue = 123
// вызывается callback
Опция: immediate
Если передано immediate: true
, коллбэк будет вызван сразу же после начала наблюдения с текущим значением выражения:
vm.$watch('a', callback, {
immediate: true
})
// `callback` вызывается сразу, с текущим значением `a`
Обратите внимание, при использовании опции immediate
нет возможности отменить отслеживание указанного свойства в коллбэке вызванном в первый раз.
// Подобное приведёт к ошибке
const unwatch = vm.$watch(
'value',
function () {
doSomething()
unwatch()
},
{ immediate: true }
)
Если необходимо вызвать функцию unwatch внутри коллбэка, то следует проверять её доступность:
const unwatch = vm.$watch(
'value',
function () {
doSomething()
if (unwatch) {
unwatch()
}
},
{ immediate: true }
)
Last updated
Was this helpful?