2017-02-10 20 views
2

Ich habe eine Vue-Liste, die auf einem Array basiert, und jedes Array-Element rendert eine Komponente, an die ich die Array-Elementeigenschaften anbinde.Vue.js - Komponentendaten werden nicht aktualisiert

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

Diese Komponente hat ein gemischten Daten, basierend auf den binded Eigenschaften

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

Das Problem ist, dass, wenn ich die erste Liste Array in irgendeiner Weise zu ändern, die gemischte prop des Bauteils hält es original update und ändert sich nicht, auch wenn sich die ursprünglichen binded Daten ändern.

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

Wie kann ich die Komponente machen es ow Daten Eigenschaft zu aktualisieren?

+3

Sollten Sie in diesem Fall keine [berechnete Eigenschaft] (https://vuejs.org/v2/guide/computed.html) verwenden? – UnholySheep

+0

@UnholySheep JA! Vielen Dank. Ich bin neu in Vuejs und ich war mir der berechneten Eigenschaft nicht bewusst, es funktioniert jetzt. Danke vielmals! http://codepen.io/anything/pen/GrwNew –

+0

@UnholySheep, könnten Sie Ihre Antwort zu stimmen, um es hinzuzufügen, und andere Menschen zu helfen? –

Antwort

2

Wie in Form einer Antwort angefordert:

In diesem Fall wird ein computed property ist der richtige Ansatz, wie dem folgenden Code führt:

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; 
    } 
    } 
}); 

Auf diese Weise die computed_id (richtig) neu berechnet werden jedes Mal, wenn sich die item Requisite ändert.

+0

Das ist richtig, aber jetzt habe ich noch eine Frage: wenn eine bestimmte Eigenschaft nicht von den Eltern Daten nicht kommen, wie kann ich einen bestimmten Wert aktualisieren und gepflegt werden: http://codepen.io/anything/pen/vgQgeM Dies hat ein Klickereignis und es aktualisiert einen Wert. Das wird für bestimmte Elemente aktualisiert, aber es bleibt, wenn ich das Array habe. Irgendwelche Gedanken? –

+1

@AdrianFlorescu Ich bin nicht 100% sicher, dass ich verstehe, was Sie erreichen möchten (und Sie sollten wahrscheinlich eine neue Frage dafür erstellen). Wenn Sie ein „Komponente-local“ Variable (definiert über 'data') mit einem von der Stütze verbinden wollen könnten Sie einfach tun, dass im Innern der berechneten einer (anstatt direkt den berechneten Wert zu ändern) - zB:' computed_id: function () {return this.item.id + this.id; } '(wobei' this.id' eine Variable ist, die im Abschnitt 'data' der Komponente definiert ist). Wenn dies nicht das ist, was Sie anstreben, sollten Sie wahrscheinlich eine neue Frage stellen. – UnholySheep

+0

Ich sollte eine neue Frage erstellen, aber um Ihre Frage zu beantworten, sehen Sie bitte den Stift oben und klicken Sie auf eine Zeile. Der Wert wird aktualisiert, aber wenn ich das Array ändere, möchte ich, dass dieser Wert verschwindet. Nicht sicher, warum das genau auf der gleichen Zeile liegt, selbst wenn Sie das Array ändern. –

Verwandte Themen