특정 데이터의 변화를 감지하여 자동으로 특정 로직을 수행하도록 해주는 속성
new Vue({
data() {
return {
message: 'Hello vue'
}
},
watch: {
message(newVal, oldVal) {
console.log('newVal: %s, oldVal: %s', newVal, oldVal)
}
}
})
기본 사용되는 방법으로 message 데이터의 변경을 감지하여 newVal
변경된 값, oldVal
변경되기 전 값으로 구분된다.
watch의 callback
함수를 대신하여 메서드 함수를 매칭시킬 수 있다.
new Vue({
watch: {
'message': 'logMessage'
},
data() {
return {
message: 'Hello'
}
},
methods: {
logMessage() {
console.log(this.message);
}
}
})
객체 내의 값의 변경을 감지하려면 Options으로 deep: true
를 사용한다.
new Vue({
watch: {
user: {
handler(value) {
console.log(value) // { ..., age: 30 }
},
deep: true
}
},
mounted() {
this.user.age = 30;
},
data() {
user: {
name: 'Jkun',
age: 28
}
}
})
mounted에서 user 데이터 값을 변경하여 watch
이벤트의 독장을 확인할 수 있다.
deep: true
값을 주석 처리하여 위 코드를 실행하게 되면 console이 뜨지 않는 것을 볼 수 있다.
또한, 아래와 같이 객체 내 선택적으로 감지할 수 있다.
new Vue({
watch: {
'user.age'(value) {
console.log(value); // 30
}
}
...
})
컴포넌트가 생성되자마자 즉시 실행되며, 데이터 초기화 이전부터 감시하게 된다.
new Vue({
watch: {
handler(val, oldVal) {
console.log(val, oldVal)
},
immediate: true
}
...
})