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-repeat
dyrektywę. 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-repeat
przypadku przypisanie tworzy nową zmienną w ng-repeat
zakresie, 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 priority
moż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-repeat
uruchomieniu ponownie wykorzystuje zakres izolowany zamiast tworzyć zakres, który prototypowo dziedziczy z zakresu nadrzędnego. Z ng-repeat
dokumentacji wynika, że ta dyrektywa ma charakter priorytetowy 1000
. Nie jest jasne, czy 1
jest to wyższy poziom priorytetu, czy niższy poziom priorytetu. Kiedy użyłem poziomu priorytetu 1
w mojej dyrektywie, nie miało to znaczenia, więc spróbowałem 2000
. Ale to pogarsza sytuację: moje dwukierunkowe wiązania stają się, undefined
a moja dyrektywa nic nie wyświetla.
Stworzyłem skrzypce, aby pokazać mój problem . Skomentowałem priority
ustawienie w mojej dyrektywie. Mam listę obiektów nazw i dyrektywę o nazwie, name-row
która pokazuje pola imienia i nazwiska w obiekcie nazwy. Po kliknięciu wyświetlanej nazwy chcę, aby ustawiała selected
zmienną w głównym zakresie. Tablica nazw, selected
zmienna jest przekazywana do name-row
dyrektywy 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 selected
znajduje 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-repeat
tworzeniu zakresu, który prototypowo dziedziczy po zakresie nadrzędnym, i zamiast tego używać zakresu izolowanego mojej dyrektywy? - Dlaczego poziom priorytetu
2000
w mojej dyrektywie nie działa? - Czy korzystając z Batarangu można dowiedzieć się, jaki typ lunety jest używany?
scope: true
dla 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.