2017-03-10 27 views
7

ja mijając rekwizyty do komponentu:Dostęp rekwizyty w funkcji danych komponentu vue

<template> 
    {{messageId}} 
    // other html code 
</template> 

<script> 
    export default { 
     props: ['messageId'], 
     data: function(){ 
     var theData={ 
      // below line gives ReferenceError messageId is not defined 
      somevar: messageId, 
      // other object attributes 
     } 
     } 
    } 
</script> 

W powyższym kodzie, mam skomentował wiersz, który daje błąd. Jeśli usuniemy tę linię, działa ona jak normalnie, a szablon renderuje się poprawnie (i widzę również oczekiwaną wartość {{messageId}}). Dlatego logika przekazywania danych jest poprawna. Wydaje się, że sposób dostępu do danych messageId w danych() jest nieprawidłowy. Jak uzyskać dostęp do rekwizytów messageId w danych?

+1

'this.messageId' – Bert

+0

Ponadto, dane funkcja musi zwrócić obiekt danych. – Bert

Odpowiedz

8

Z metody data() można odwoływać się do właściwości komponentu za pomocą this.

Więc w twoim przypadku:

data: function() { 
    var theData = { 
    somevar: this.messageId, 
    // other object attributes 
    } 

    return theData; 
} 
+1

https://vuejs.org/v2/guide/components.html#One-Way-Data-Flow – user1398619

2

Aby przypisać właściwość data równa rekwizytów, można użyć obserwatora, jak następuje:

<script> 
    export default { 
     props: ['messageId'], 
     data: function(){ 
     var theData={ 
      somevar: "", 
      // other object attributes 
     } 
     }, 
     watch: { 
     messageId: function(newVal) { 
      this.somevar = newVal 
     } 
     } 
    } 
+2

Lub użyj 'obliczonego' –

+0

@RoyJ Tak, to również można zrobić, ale jeśli chcesz zaktualizować dane zmienna, niż musisz użyć obliczonej z geterem. – Saurabh

+0

Mam na myśli, że należy zastąpić element danych obliczoną, jeśli 'somevar' nigdy nie jest przypisany przez nic poza obserwatorem. –

Powiązane problemy