2016-12-06 18 views
12

Oto moje dane:Axios nie można ustawić dane

data: function(){ 
    return { 
     contas: [{id: 3, 
      nome: "Conta de telefone", 
      pago: false, 
      valor: 55.99, 
      vencimento: "22/08/2016"}] //debug test value 
    }; 
}, 

A oto moja prośba get:

beforeMount() { 
    axios.get('http://127.0.0.1/api/bills') 
     .then(function (response) { 
      console.log("before: " + this.contas); 
      this.contas = response.data; 
      console.log("after: " + this.contas); 
     }); 
}, 

Problemem jest to, że nie może uzyskać dostępu do this.contas od wewnątrz axios.get(). Próbowałem bezskutecznie Vue.set(this, 'contas', response.data); i window.listaPagarComponent.contas = response.data;.

Moja konsola pokazuje:

before: undefined 
after: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object] 

Ale Vue DevTools pokazuje tylko:

contas: Array[1] 
    0: Object 
    id: 3 
    nome: "Conta de telefone" 
    pago: false 
    valor: 55.99 
    vencimento: "22/08/2016" 

Oto mój full code.

+1

spróbuje użyć 'utworzony()' 'beforeMount hak zamiast () '.A jeśli już zdefiniowałeś jakieś dane w tablicy contas, to myślę, że obiecuję, że powinieneś zrobić array.push. –

+1

Okay, czy mógłbyś utworzyć nową tablicę w modelu danych i ustawić dla niej dane odpowiedzi? A potem kasy, czy przedmioty są przechowywane w tablicy. Niestety, nie pracuję z Axios, wolałbym iść z zasobem Vue. –

+1

@Belmin Nic się nie zmienia ... I jest to tylko wartość testu debugowania. Nie chcę tej wartości. Problem polega na tym, że nie mogę użyć słowa 'this.contas' w odniesieniu do danych komponentu' contas'. Żadna funkcja nie działa. Myślę, że axios jest "obiektem", więc kiedy używam 'this', odnosi się to do axios. –

Odpowiedz

45

W funkcji opcjonalnych jak data i created, vue wiąże this na przykład widok-modelu dla nas, więc możemy użyć this.contas, ale w funkcji wewnątrz then, this nie jest związany.

Więc trzeba zachować widok model podobne (created oznacza struktura danych komponentu jest zmontowany, który jest na tyle tutaj mounted opóźni operację więcej):

created() { 
    var self = this; 
    axios.get('http://127.0.0.1/api/bills') 
     .then(function (response) { 
       self.contas = response.data; 
       }); 
} 

Albo cię może używać funkcji strzałki w standardzie ES6, jeśli chcesz tylko obsługiwać nowoczesne przeglądarki (lub używać transpilatora takiego jak babel), na przykład:

created() { 
    axios.get('http://127.0.0.1/api/bills') 
     .then((response) => { 
       this.contas = response.data; 
       }); 
} 

this Wewnętrzne funkcje strzałki są powiązane zgodnie z kontekstem leksykalnym, co oznacza, że ​​powyższy fragment kodu jest taki sam, jak w created, czego właśnie chcemy.

+1

Dzięki! to rozwiązało mój problem! –

+0

Hurra! to rozwiązało mój problem ... dzięki. Bez względu na to, ile razy nauczyłem się i rozumiałem "to", zawsze będzie to dla mnie problem. –

0

Tak, myślę, że muszę zadać kolejne pytanie, ponieważ problem jest teraz inny. Ale aby uzyskać dostęp do this.contas Właśnie zastąpiłem beforeMount() {} z mounted: function() {}.

6

Aby mieć dostęp do this.contas wewnątrz axios.get() Czy trzeba wiążące "to", aby utrzymać zmienną wykorzystanie scoped:

mounted() { 
    axios.get('http://127.0.0.1/api/bills') 
    .then(function (response) { 
     console.log("before: " + this.contas); 
     this.contas = response.data; 
     console.log("after: " + this.contas); 
    }.bind(this)); 
} 
Powiązane problemy