2017-02-10 38 views
2

私は配列に基づいたVueリストを持っており、各配列アイテムは配列アイテムプロパティをバインドするコンポーネントをレンダリングします。Vue.js - コンポーネントデータが更新されない

<div v-for="item in items"> 
     <item v-bind:item="item"></item> 
    </div> 

このコンポーネントは、混合データを持つバインドさ特性

Vue.component('item', { 
    template: '<p>ID: {{item.id}}, {{component_id}}</p>', 
    props: ['item'], 
    data: function() { 
    return { 
     component_id: this.item.id 
    } 
    } 
}); 

に基づく問題は、私はどのような方法で初期リストの配列を変更したとき、成分の混合プロペラは、それが元だ維持することです元のバインドされたデータが変更された場合でも、更新され、変更されません。

http://codepen.io/anything/pen/bgQBwQ

どのように私はコンポーネントがOWデータプロパティの更新することができますか?回答の形で要求されるように

+3

この場合、[計算されたプロパティ](https://vuejs.org/v2/guide/computed.html)を使用してはいけませんか? – UnholySheep

+0

@UnholySheepはい!ありがとう。私はvuejsには本当に新しいので、私は計算されたプロパティを認識していない、それは今動作します。ありがとう、トン! http://codepen.io/anything/pen/GrwNew –

+0

@UnholySheep、投票して他の人を助けるためにあなたの答えを追加できますか? –

答えて

2

この場合computed propertyには、次のコードにつながる、正しいアプローチである:computed_idは(正確に)再計算する

Vue.component('item', { 
    template: '<p>Original: {{item.id}}, Mixed: {{component_id}}, Computed: {{computed_id}}</p>', 
    props: ['item'], 
    computed: { 
    computed_id: function() { 
     return this.item.id; 
    } 
    } 
}); 

この方法毎回item小道具が変更されます。

+0

これは間違いありませんが、今私は別の質問があります:特定のプロパティが親データから来ない場合、どのように特定の値とそれを更新することができますか:http://codepen.io/anything/pen/vgQgeMこれにはクリックイベントがあり、値を更新します。それは特定のアイテムのために更新されますが、配列を持っていれば残ります。何かご意見は? –

+1

@AdrianFlorescu私は100%あなたが達成しようとしていることを理解していません。あなたはおそらくそれについて新しい質問を作成するべきです。あなたがプロップからのものと "コンポーネントローカル"変数( 'data'を介して定義されたもの)を結合したいのであれば、(計算された値を直接変更するのではなく) ){return this.item.id + this.id; } '(ここで' this.id'はコンポーネント 'data'セクションで定義された変数です)。これがあなたが目指しているものでなければ、おそらく新しい質問を作り出すべきです。 – UnholySheep

+0

私は新しい質問を作成する必要がありますが、あなたの質問に答えるには、上記のペンを見て、任意の行をクリックしてください。値は更新されますが、配列を変更するとその値が消えてしまいます。配列を変更したとしても、同じ行に何があるのか​​はわかりません。 –

関連する問題