2017-05-29 3 views
0

Ich baue so etwas, wo das Land, das ich wähle automatisch den Telefon-Ländercode diktieren.Vue nicht aktualisieren Eingang, der auf einem anderen

enter image description here

Sowohl das Land und Ländercode werden in einem Kundenobjekt gespeichert, und wenn ich den Wert des Landes zu ändern bin, wird der Trigger richtig genannt, und ich kann den Ländercode zu ändern in Vue Entwickler-Tools sehen, aber Die zugehörige Eingabe wird nicht aktualisiert. Dies ist mein Code:

data: function() { 
     return { 
      customer: {}, 
      countries: this.$store.state.settings.countries, 
     } 
    }, 
    created: function() { 
     var defaultCountry = _.find(this.countries, { default: true }); 

     this.customer.country = defaultCountry.name; 
     this.customer.countryCode = defaultCountry.code; 
    }, 
    methods: { 
     updateCountryCode: function(country) { 
      this.customer.countryCode = country.code; 
     }, 
    } 

Und das ist die relevante HTML:

<vSelect 
label="name" 
v-model="customer.country" 
:options="countries" 
:onChange="updateCountryCode"> 
</vSelect> 

<input type="text" disabled :value="customer.countryCode"> 

Was mache ich falsch? Warum sehe ich, dass die Daten auf Dev-Tools aktualisiert werden, aber nicht als reaktiv und meine Ländercode-Eingabe bleibt gleich?

+0

Sie sollten Ihr Kundenobjekt wie folgt definieren: 'customer: {country: null, countryCode: null,},' – Nora

+0

Was? Das hat funktioniert! Ich nahm an, dass, da ich einen Standardwert auf created() legte, ich diese Werte in dem leeren Objekt nicht zuweisen musste. Irgendeine Idee, warum dies benötigt wird? Auch, bitte fügen Sie dies als eine separate Antwort, so kann ich es als gelöst markieren :) – Anonymous

Antwort

0

Sie sollten Ihre Kundenobjekt wie so Kunden definieren:

{ 
    country: null, // or some other default value 
    countryCode: null, 
}, 

Sie können weitere Informationen in der Dokumentation here

0

Dies ist, wie Sie es shoul tun finden oder @ Nora Verfahren zur Bestimmung der Objekteigenschaften zu initialisieren zu null ist

updateCountryCode: function(country) { 
    this.$set(this.customer, 'countryCode', country.code) 
}, 

Und der Grund, wegen change detection caveats in vue reactivity

+0

Danke dafür - Ich war mir nicht sicher, ob dies innerhalb der berüchtigten Vue Vorbehalte war oder nicht, aber jetzt sehe ich es definitiv ist. – Anonymous

+0

@Anonymous glücklich zu helfen :) –

Verwandte Themen