Mam dyrektywę z izolowanym zakresem (aby móc ponownie wykorzystać dyrektywę w innych miejscach), a kiedy używam tej dyrektywy z rozszerzeniem ng-repeat, nie działa.
Przeczytałem całą dokumentację i odpowiedzi Stack Overflow na ten temat i rozumiem problemy. Myślę, że uniknąłem wszystkich typowych problemów.
Rozumiem więc, że mój kod nie działa z powodu zakresu utworzonego przez ng-repeatdyrektywę. Moja własna dyrektywa tworzy zakres izolowany i tworzy dwukierunkowe powiązanie danych z obiektem w zakresie nadrzędnym. Moja dyrektywa przypisze nową wartość obiektu do tej zmiennej związanej i działa to doskonale, gdy moja dyrektywa jest używana bez ng-repeat(zmienna nadrzędna jest poprawnie aktualizowana). Jednak w ng-repeatprzypadku przypisanie tworzy nową zmienną w ng-repeatzakresie, a zmienna nadrzędna nie widzi zmiany. Wszystko to jest zgodne z oczekiwaniami na podstawie tego, co przeczytałem.
Przeczytałem również, że gdy na danym elemencie jest wiele dyrektyw, tworzony jest tylko jeden zakres. I że prioritymożna ustawić w każdej dyrektywie, aby określić kolejność, w jakiej dyrektywy są stosowane; dyrektywy są sortowane według priorytetów, a następnie wywoływane są ich funkcje kompilujące (szukaj słowa „priorytet” na http://docs.angularjs.org/guide/directive ).
Miałem więc nadzieję, że mógłbym użyć priorytetu, aby upewnić się, że moja dyrektywa działa jako pierwsza i ostatecznie tworzy zakres izolowany, a po ng-repeaturuchomieniu ponownie wykorzystuje zakres izolowany zamiast tworzyć zakres, który prototypowo dziedziczy z zakresu nadrzędnego. Z ng-repeatdokumentacji wynika, że ta dyrektywa ma charakter priorytetowy 1000. Nie jest jasne, czy 1jest to wyższy poziom priorytetu, czy niższy poziom priorytetu. Kiedy użyłem poziomu priorytetu 1w mojej dyrektywie, nie miało to znaczenia, więc spróbowałem 2000. Ale to pogarsza sytuację: moje dwukierunkowe wiązania stają się, undefineda moja dyrektywa nic nie wyświetla.
Stworzyłem skrzypce, aby pokazać mój problem . Skomentowałem priorityustawienie w mojej dyrektywie. Mam listę obiektów nazw i dyrektywę o nazwie, name-rowktóra pokazuje pola imienia i nazwiska w obiekcie nazwy. Po kliknięciu wyświetlanej nazwy chcę, aby ustawiała selectedzmienną w głównym zakresie. Tablica nazw, selectedzmienna jest przekazywana do name-rowdyrektywy przy użyciu dwukierunkowego wiązania danych.
Wiem, jak to działa, wywołując funkcje w głównym zakresie. Wiem również, że jeśli selectedznajduje się wewnątrz innego obiektu i wiążę się z obiektem zewnętrznym, wszystko będzie działać. Ale w tej chwili nie jestem zainteresowany tymi rozwiązaniami.
Zamiast tego mam następujące pytania:
- Jak zapobiec
ng-repeattworzeniu zakresu, który prototypowo dziedziczy po zakresie nadrzędnym, i zamiast tego używać zakresu izolowanego mojej dyrektywy? - Dlaczego poziom priorytetu
2000w mojej dyrektywie nie działa? - Czy korzystając z Batarangu można dowiedzieć się, jaki typ lunety jest używany?







scope: truedla twojej dyrektywy. Zobacz także (jeśli jeszcze tego nie zrobiłeś) stackoverflow.com/questions/14914213/ ... Również fakt, że dyrektywa będzie używana w wielu miejscach, nie oznacza, że powinniśmy automatycznie używać zakresu izolowanego.