Dużo czytałem o używaniu tych symboli we wdrażaniu niestandardowych dyrektyw w AngularJS, ale koncepcja nadal nie jest dla mnie jasna. Mam na myśli, co to znaczy, jeśli używam jednej z wartości zakresu w dyrektywie niestandardowej?
var mainApp = angular.module("mainApp", []);
mainApp.directive('modalView',function(){
return{
restrict:'E',
scope:'@' OR scope:'&' OR scope:'=' OR scope:'>' OR scope:true
}
});
Co dokładnie robimy z lunetą?
Nie jestem też pewien, czy „zakres: '>'” istnieje w oficjalnej dokumentacji, czy nie. Został użyty w moim projekcie.
Edycja-1
Użycie „zakresu: '>'” było problemem w moim projekcie i zostało naprawione.
źródło
@?
?<
jest nie tylko kompatybilny z komponentami w 1.5, ale jest również zgodny z dyrektywami. @Homer?
oznacza atrybut jako opcjonalny .>
nie ma w dokumentacji.<
służy do wiązania w jedną stronę.@
wiązanie służy do przekazywania ciągów. Te ciągi obsługują{{}}
wyrażenia dla wartości interpolowanych.=
powiązanie jest dla dwukierunkowego powiązania modelu. Model w zakresie nadrzędnym jest powiązany z modelem w izolowanym zakresie dyrektywy.&
wiązanie służy do przekazywania metody do zakresu dyrektywy, aby można ją było wywołać w ramach dyrektywy.Kiedy ustawiamy zakres: true w dyrektywie, Angular js utworzy nowy zakres dla tej dyrektywy. Oznacza to, że wszelkie zmiany wprowadzone w zakresie dyrektywy nie zostaną odzwierciedlone z powrotem w kontrolerze nadrzędnym.
źródło
<
jednokierunkowe wiązanie=
dwukierunkowe wiązanie&
powiązanie funkcji@
przekazują tylko ciągiźródło
Kiedy tworzymy dyrektywę klienta, zakres dyrektywy może znajdować się w zakresie izolowanym, co oznacza, że dyrektywa nie dzieli zakresu z kontrolerem; zarówno dyrektywa, jak i kontroler mają swój własny zakres. Jednak dane można przekazać do zakresu dyrektywy na trzy możliwe sposoby.
@
literału ciągu, wartości ciągu przekazywania, powiązania w jedną stronę.=
literału ciągu, obiektu przekazywania, wiązania na 2 sposoby.&
literał ciągu, wywołuje funkcję zewnętrzną, może przekazywać dane z dyrektywy do kontrolera.źródło
Dokumentacja AngularJS dotycząca dyrektyw jest całkiem dobrze napisana, jeśli chodzi o znaczenie symboli.
Żeby było jasne, nie możesz po prostu mieć
w definicji dyrektywy. Musisz mieć właściwości, do których mają zastosowanie te powiązania, na przykład:
Gorąco zachęcam do zapoznania się z dokumentacją i samouczkami na stronie. Jest o wiele więcej informacji, które musisz wiedzieć o izolowanych zakresach i innych tematach.
Oto bezpośredni cytat z powyższej strony, dotyczący wartości
scope
:Pobrano 13.02.2017 z https://code.angularjs.org/1.4.11/docs/api/ng/service/ $ compile # -scope-, na licencji CC-by-SA 3.0
źródło
Miałem problem z przypisaniem wartości do któregokolwiek z symboli w AngularJS 1.6. W ogóle nie uzyskałem żadnej wartości
undefined
, chociaż zrobiłem to dokładnie w taki sam sposób, jak inne powiązania w tym samym pliku, które działały.Problem polegał na tym, że nazwa mojej zmiennej miała podkreślenie.
To się nie udaje:
To działa:
(Nie do końca związane z pierwotnym pytaniem, ale był to jeden z najlepszych wyników wyszukiwania, kiedy sprawdzałem, więc mam nadzieję, że pomoże to komuś z tym samym problemem).
źródło