2017-02-06 4 views
0

definiert Ich schrieb den folgenden Code und Vue klagt:VueJS2 Eigenschaft nicht

[Vue warnen]: Eigenschaft oder Methode „Vorfälle“ definiert ist, nicht auf der Instanz aber während machen verwiesen. Stellen Sie sicher, dass Sie in der Datenoption reaktive Dateneigenschaften deklarieren.

Ich sehe nicht, warum Vorfälle nicht zugegriffen werden können?

var app = new Vue({ 
    el: '#app', 
    data: { 
     responders: [], 
     incidents: [] 
    }, 

    mounted: function() { 
     this.getIncidents(); 
    }, 

    methods: { 
     getIncidents: function() { 
      console.log('getIncidents'); 
      var app = this; 
      this.$http.get('/api/v1/incidents').then(function(response) { 
       // set data 
       var incidentsReceived = response.data.map(function (incident) { 
        return incident; 
       }); 
       Vue.set(app, 'incidents', incidentsReceived); 
      }) 
     }, 

     getResponders: function() { 
      console.log('fetchResponders'); 
      var app = this; 
      this.$http.get('/api/v1/responders').then(function(response) { 
       // set data on vm 
       var respondersReceived = response.data.map(function (responder) { 
        return responder 
       }); 
       Vue.set(app, 'responders', respondersReceived); 
      }); 
     } 
    } 
}) 
+0

Möglich, eine [Geige] (https://jsfiddle.net/er3tjyh0/) davon zu erstellen, die das Problem zeigt? – Saurabh

Antwort

0

data ist für die interne Komponentendatenmodellierung gemeint, während Requisiten, die extern belegt werden kann, festgelegt werden unter Verwendung der props Schlüssel für die Komponente.

Mit anderen Worten, versuchen:

var app = new Vue({ 
    ..., 
    props: { 
    incidents: { 
     type: Array, 
     required: false //change this as you see fit. 
    } 
    }, 
    ... 
}); 

Für eine vollständige Dokumentation über Bauteileigenschaften finden Sie in der official guide.

+0

Aber ich habe keine Komponente definiert, oder? Von VueJS1.0 habe ich immer die Daten in meinem "Daten" Container wie folgt gepackt: 'new Vue ({ el: '#app', Daten: { Nachricht: 'Grüße deine Majestät!' });' – sesc360

+0

Sowohl die Root-Vue-Instanz als auch die Komponenten-Interface-Eigenschaften werden auf die gleiche Weise angezeigt. Ich nehme an, Sie haben eine Art Vorlage, die die Eigenschaftswerte auf die eine oder andere Weise liefert, aber es scheint, dass Sie den Fehler erhalten, während Sie Vue.set (...) verwenden? Wenn das der Fall ist, bin ich mir nicht sicher, ob Sie Vue.set verwenden sollten und ich denke, was Sie suchen, ist etwas wie "this.incidents", um auf "Vorfälle" von Ihren "Daten" zuzugreifen. –

0

EDIT: Habe den Code zum ersten Mal nicht sehr gut gelesen. Stellen Sie sicher, dass in der Antwort Daten enthalten sind, und legen Sie das Ereignisarray nicht fest.

+0

Ich habe den letzten Ansatz mit Vue.set versucht, aber ich bekomme immer noch diesen Fehler. Ich weise den Variablen Incidents einen Wert innerhalb der Callback-Funktion zu, damit es funktioniert? Das Seltsame ist, dass die Responderfunktion perfekt funktioniert! Es ist die gleiche Struktur, also sehe ich nicht, warum Zwischenfälle nicht funktionieren. – sesc360

+0

Haben Sie es mit sich selbst versucht? Können Sie überprüfen, ob Sie tatsächlich Daten innerhalb der Antwort erhalten, nur um sicherzustellen, dass Sie dort etwas haben? Habe gerade bemerkt, dass du die App auf 'this' gesetzt hast: D: D –

+0

funktioniert das nicht mit var app = this? Ja, Daten sind verfügbar – sesc360

Verwandte Themen