24
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vue.jsのnested dataをwatchする

Last updated at Posted at 2018-11-08

環境

  • Vue 2.5.17

dataに定義されている連想配列の内部をwatchしたい

ダメな例

new Vue({
  el: '#app',
  data: {
    obj: {
      message: ''
    },
    result: ''
  },
  watch: {
    obj.message: function(val){
      this.result = val;
    }
  }
});

obj.messageはキー名としてアウト。。。
じゃあどうやって監視するのか調べたところ

  • handlerでobj全体を監視する方法
  • 文字リテラルでキー名を指定する方法

があった。

handlerでobj全体を監視する方法

new Vue({
  el: '#app1',
  data: {
    obj: {
      message: '',
      other: ''
    },
    result: ''
  },
  watch: {
    obj: {
      handler: function(val) {
        this.result = val.message;
      },
      deep: true
    }
  }
});

この場合はobjの他の要素も監視されるので扱いには注意。

文字リテラルでキー名を指定する方法

new Vue({
  el: '#app2',
  data: {
    obj: {
      message: '',
      other: ''
    },
    result: ''
  },
  watch: {
    'obj.message': function(val) {
      this.result = val;
    }
  }
});

この場合はobj.messageのみが監視される。

jsfiddleに上記コードを書いた、結構便利だったので検証などで利用していきたい。。。
https://jsfiddle.net/nakata_kazuhiro/5y1rctap/31/

参考

Vue.js 公式
vue.js 2.x その0009 watchで配列(array)や連想配列(object)を監視する

24
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?