web-dev-qa-db-ja.com

vueオブジェクトの配列の特定のプロパティを監視する方法

私はvue.js 2.5.2を使用しています

オブジェクトの配列があり、forms [*]。selectedを監視し、それが変更された場合は関数を呼び出します。

これは私の試みですが、明らかに正しくありません。配列をforループに入れて、選択した各オブジェクトのプロパティを監視してみました。

watch: {
   for (var i = 0; i < forms.length; i++) {
     forms[i].selected: function(){
     console.log("change made to selection");
   }
 }
},

これは、forms []と呼ばれるオブジェクトの配列です。

forms: [
        {
          day: '12',
          month: '9',
          year: '2035',
          colors: 'lightblue',//default colour in case none is chosen
          selected: true
        },
        {
          day: '28',
          month: '01',
          year: '2017',
          colors: 'lightgreen',//default colour in case none is chosen
          selected: true
        }
      ],

どんな助けでも大歓迎です、

ありがとう

8
Shane G

deep watcher を使用することもできますが、より洗練されたソリューションは、監視するデータの計算されたプロパティを作成し、代わりにそれを監視することです。

new Vue({
  el: '#app',
  data: () => ({
    forms: [{
        day: '12',
        month: '9',
        year: '2035',
        colors: 'lightblue',
        selected: true
      },
      {
        day: '28',
        month: '01',
        year: '2017',
        colors: 'lightgreen',
        selected: true
      }
    ],
  }),
  computed: {
    selected() {
      return this.forms.map(form => form.selected)
    }
  },
  watch: {
    selected(newValue) {
      console.log("change made to selection")
    }
  }
})
<html>

<head>
  <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>

<body>

  <div id="app">
    <ul>
      <li v-for="(form, i) in forms" :key="i">
        <input type="checkbox" v-model="form.selected"> {{form.colors}}
      </li>
    </ul>
  </div>

</body>

</html>
7
Andrei Savin