2017-03-15 16 views
9

Korzystanie z v2.2.2. Mam następującą strukturę w mojej aplikacji VueJS. Jak uzyskać dostęp do wszystkich składników konta z metody w moim komponencie Post? Liczba kont jest dynamiczna - chcę pobrać wszystkie załadowane komponenty Account i powtórzyć je.Uzyskiwanie dostępu do zagnieżdżonych komponentów potomnych w VueJS

Wiem, że ma to coś wspólnego z $refs i $children, po prostu nie mogę wymyślić właściwej ścieżki.

<Root> 
    <Post> 
     <AccountSelector> 
      <Account ref="anAccount"></Account> 
      <Account ref="anAccount"></Account> 
      <Account ref="anAccount"></Account> 
     </AccountSelector> 
    </Post> 
</Root> 

Odpowiedz

15

http://vuejs.org/v2/guide/components.html#Child-Component-Refs

Pomimo istnienia rekwizytów i zdarzeń, czasami może trzeba jeszcze bezpośredni dostęp do komponentu dziecko w JavaScript. Aby to osiągnąć, należy przypisać identyfikator referencyjny do komponentu potomnego za pomocą ref. Na przykład:

<div id="parent"> 
    <user-profile ref="profile"></user-profile> 
</div> 

var parent = new Vue({ el: '#parent' }) 
// access child component instance 
var child = parent.$refs.profile 

Kiedy ref stosuje się razem z V-do, sędzia dostaniesz będzie tablicą lub przedmiot zawierający elementy podrzędne mirroring danych źródła.

Zasadniczo wewnątrz AccountSelector.vue można zrobić this.$refs.anAccount.map(account => doThingToAccount(account))

Edit Powyższa odpowiedź jest bezpośredni dostęp do dziecka.

Obecnie nie ma możliwości uzyskania dostępu do komponentu nadrzędnego/podrzędnego innego niż bezpośredni z $refs. Najlepszym sposobem na uzyskanie dostępu do ich danych byłoby zdarzenie http://vuejs.org/v2/guide/components.html#Non-Parent-Child-Communication lub użycie Vuex (co polecam).

Bezpośredni rodzic - komunikacja dzieci jest bardzo trudna bez jednej z tych 2 metod.

+1

Dzięki! Ale jak mogę spopularyzować te dane w "Post"? Szukam dostępu do danych w Post, jeden poziom powyżej AccountSelector. Jeśli zrobię "post. $ Refs.anAccount", otrzymam niezdefiniowanie. Brakuje mi poziomu. –

+0

Niestety, dostaję cię teraz, nie jestem pewien, czy możesz zdobyć nieposzlakowane dzieci. Najlepszym sposobem na uzyskanie dostępu do ich danych będzie wydarzenie http://vuejs.org/v2/guide/components.html#Non-Parent-Child-Communication lub przy użyciu Vuex (co polecam). Bezpośrednia komunikacja rodzic-dziecko jest bardzo trudna bez jednej z tych 2 metod. –

+0

Dzięki za referencję - ten paragraf rzeczywiście stwierdza, że ​​będę musiał użyć Vuex. Tak naprawdę to robię, tylko myślałem, że jest bardziej bezpośredni sposób! Czy możesz zmodyfikować swoją odpowiedź, aby zaakceptować ją jako odpowiedź? –

Powiązane problemy