Vue.jsで配列・オブジェクトを扱う場合、配列のデータは更新されているのに変更が検出できない、という現象でつまったので書きます。
僕がつまったケース
- mountedで配列に値をセットし、その後あるメソッドを実行した場合に変更が検出できない。
Vue.jsで配列・オブジェクトの変更が検出できない場合の解決方法
ダメな例
export default { data(){ return{ sports: {} // 配列を初期化 } }, mounted(){ this.sports['ball'] = 'baseball'; // キーを指定して値をセット }, methods:{ changeSports(key, val){ this.sports[key] = val; // キーを指定して値を変更 } } }
おなじみの[キー]で指定する方法を使っていますが、これだと、vueテンプレート内で変更が検出できませんでした。
正しい例
export default { data(){ return{ sports: {} // 配列を初期化 } }, mounted(){ this.$set(this.sports, 'ball', 'baseball'); // キーを指定して値をセット }, methods:{ changeSports(key, val){ this.$set(this.sports, key, val); // キーを指定して値を変更 } } }
this.$set(配列, キー, 値)を使うと検出してくれました!