2017-08-07 19 views
-1

は私がオブジェクトを持っており、構造がウォッチャーに、今、この追加配列

obj: { 
    1: { 
    'a': [ [] ], 
    'b': [ [] ] 
    } 
} 

のように見えます(小道具が更新されません)、私は、このオブジェクトに'c' => [ [] ]を追加しようとしています。

  • 私はthis.obj[1]['c'] = [ [] ]を使用してみましたが、私はそれをこの方法を行う際には、(子コンポーネント上)小道具の変化を見ていません。私はほとんど使用する必要があると確信しています$set

  • this.$set(this.obj, 1, { ['c']: [ [] ] }) - 実際にはこれを使用して、 'a'と 'b'のプロパティは完全に削除されます。 this.$set(this.obj[1], ['c'], [ [] ]);を使用して

  • は - のいずれか

コメントで述べたように$が

+0

はそれだけではないでしょう 'これ。$セット(this.obj [ '1']、 'C'、[[]])'?なぜオブジェクトキーとして配列(つまり[['c'] ')を使用しようとするのか分かりません – Phil

+0

これを使用して、オブジェクトを適切に更新しますが、DOMは更新されません。ループのために実行する前に '{{obj}}'を実行する前に、それでも – senty

+0

を表示してください。 – Phil

答えて

0

を設定し使用する適切な方法は何ですか、単に

を使用する小道具はこれを見ていませんが、オブジェクトを変更するように思えます例えば
this.$set(this.obj['1'], 'c', [[]]) 

...

new Vue({ 
 
    el: '#app', 
 
    data: { 
 
    obj: { 
 
     1: { 
 
     'a': [ [] ], 
 
     'b': [ [] ] 
 
     } 
 
    } 
 
    }, 
 
    methods: { 
 
    addC: function() { 
 
     this.$set(this.obj['1'], 'c', [[]]) 
 
    } 
 
    } 
 
})
<div id="app"> 
 
    <p><button @click="addC">Add "c" property</button> 
 
    <ul> 
 
     <li v-for="(prop, key) in obj"> 
 
     {{ key }} 
 
     <ul> 
 
      <li v-for="(arr, letter) in prop"> 
 
      {{ letter }} - size: {{ arr.length }} 
 
      <ul> 
 
       <li v-for="(sub, idx) in arr"> 
 
       Index {{ idx }} - size: {{ sub.length }} 
 
       </li> 
 
      </ul> 
 
      </li> 
 
     </ul> 
 
     </li> 
 
    </ul> 
 
</div> 
 
<script src="https://unpkg.com/[email protected]/dist/vue.min.js"></script>

+0

はい、私も試してみました:/期待どおりに動作していますが、何らかの理由で、期待どおりに動作しません。オブジェクトを更新していますが、vueデバッガで見ることはできますが、DOMは更新されません。 '{{obj}} 'を使っても同じ結果が得られます:/ – senty