Es ist ein Problem mit der Reihenfolge der Ausführung. Die Haupt-Vue-Instanz ist nicht "bereit", bis die Dinge darin kompiliert wurden. Dies beinhaltet die Komponente hello
.
Wenn Sie wissen müssen, dass bar
festgelegt wurde, bevor Sie es verwenden, können Sie dies auf verschiedene Arten überwachen. Sie könnten $broadcast
ein Ereignis im Elternteil haben, um das Kind wissen zu lassen, dass bar
geladen wurde. Oder Sie können eine watch
Funktion in der untergeordneten Komponente verwenden, um Änderungen vorzunehmen, wenn bar
aktualisiert wird.
Ihr Beispiel, wenn Sie mit $set
bar
in created()
jedoch funktioniert vue-resource
Sie gehen eine Verzögerung sowieso haben, so dass Sie für die Tatsache berücksichtigen müssen, dass greeting
nicht während des Kindes ready()
Funktion bereit sein. Sie müssen entweder Ihre DOM-Struktur so gestalten, dass die greeting
undefined
ist, oder Sie müssen eine Ereignis- oder watch
-Funktion verwenden, um selbst darauf zu warten.
Beispiel mit $broadcast
:
Vue.component('hello', {
template: 'From hello tag: {{ greeting }}',
props: ['greeting'],
ready: function() {
},
events:{
'bar-ready':function(){
alert(this.greeting)
}
}
});
new Vue({
el: '#app',
created: function() {
this.$http.get('/path')
.then(function(response){
this.$set('bar',response.data);
this.$broadcast('bar-ready')
}.bind(this))
}
});
$broadcast
docs: https://vuejs.org/api/#vm-broadcast
Mißachtung der vorherigen Kommentar, es war nur ein Tippfehler meinerseits. Das Broadcast-System hat alles für mich funktioniert. Vielen Dank! – fpcjh