watch
の書き方(@Watch
デコレーター)@Watch
デコレーターを使ってリアクティブな変数の変更を監視します。watch()
関数の代わりになります。@Watch('監視対象のプロパティ名', { immediate: true, deep: true })
onXXXChanged(newVal: 型, oldVal: 型) {
// 変更時の処理
}
immediate: true
→ 初期化時にも呼ばれるdeep: true
→ ネストオブジェクトの変更も検出する(Vue2では必要)childValue
の変更を監視// ファイル名: ParentComponent.vue
<script lang="ts">
import { Vue, Component, Watch } from 'vue-property-decorator';
@Component
export default class ParentComponent extends Vue {
// 子コンポーネントとバインドされるデータ
private childValue: string = '初期値';
// childValueの変更を監視する
@Watch('childValue')
onChildValueChanged(newVal: string, oldVal: string) {
console.log('childValue changed from', oldVal, 'to', newVal);
}
}
</script>
項目 | 内容 |
---|---|
@Watch() |
クラスコンポーネント固有のデコレーター。指定したプロパティの変化を検知 |
引数 | 第一引数:プロパティ名(文字列) |
関数名 | 自由につけられるが on[Property]Changed が一般的 |
メリット | this.childValue などの参照が自然に書ける(OOP的) |
注意点 | @Watch は必ずメソッドに使う。プロパティには使えない |
クラスコンポーネントでは、@Watch('プロパティ名')
を使えば、Composition API の watch()
と同じ効果を得られる!