definiując dyrektywy w AngularJS, istnieją trzy różne sposoby przekazywania zmiennych: brak zakresu, odziedziczony zakres lub izolowany zakres. Niezależnie od tego, czy używasz składni” controller as ” (I mam nadzieję, że tak jest), nadal musisz zdecydować, której z nich użyć. W tym poście wyjaśnię różnice i zasugeruję, dlaczego możesz—lub nie-chcieć używać każdego z nich.

brak zakresu

 scope: false 

stosowanie tego typu zakresu dyrektywy jest zwykle złą praktyką, której należy unikać. Wybierając tę opcję, określasz, że Twoja dyrektywa nie ma własnego zakresu i dzieli zakres z jej nadrzędnym administratorem. Wszystko, co kontroler nadrzędny mutuje lub dodaje do zakresu, będzie obecne w dyrektywie i odwrotnie.

mój poprzedni wpis na blogu pokazał pozytywny przykład użycia scope: false w dyrektywach. W tym przykładzie użyłem go do czystej zamiany DOM w szablonie mojej dyrektywy najwyższego poziomu, a wszystkie dyrektywy służyły temu samemu prostemu celowi (przełączaniu superbohaterów) w mojej aplikacji. Myślę, że scope: false może być świetnym sposobem na wprowadzenie organizacji i czytelności w szablonie, ale poza tym używanie go może być trudnym do zrozumienia kodem spaghetti.

odziedziczony zakres

scope: true

odziedziczony zakres jest znacznie bezpieczniejszy dla danych kontrolera nadrzędnego niż brak zakresu. Podobnie jak w przypadku opcjiscope: false, w dyrektywie znajduje się wszystko, co istnieje w zakresie kontrolera nadrzędnego. Jednakże wszystko, co dyrektywa dodaje do zakresu, nie jest dzielone z zakresem nadrzędnym. Chroni to dane administratora nadrzędnego, jednocześnie pozwalając na ich współdzielenie z dyrektywą.

scope: true jest przydatna w sytuacjach, gdy dyrektywa potomna służy do mutacji danych o zakresie nadrzędnym. Chociaż bezpieczniejsze niż scope:false, używanie dziedzicznego zakresu, szczególnie wielokrotnie, jest zapachem architektonicznym.

izolowany zakres

scope: { myProperty: '='}

izolowany zakres jest najlepszą praktyką z nich wszystkich. Za pomocą tej opcji programista określa, które atrybuty są przekazywane do dyrektywy. Nic innego nie jest współdzielone między kontrolerem nadrzędnym a dyrektywą.

izolowany zakres zachęca (i wymusza) dobrą architekturę uzdrowiska i rozwój małych, skoncentrowanych komponentów. Użycie izolowanego zakresu (zwłaszcza ze składnią „controller as”) jest oznaką dobrej architektury i skutkuje dyrektywą, która będzie łatwa do konwersji na komponent Angular 2.0.

… więc czego użyć?

wszystko zależy! W doskonałej aplikacji kątowej użyłbyś izolowanego zakresu we wszystkich dyrektywach. Jednak nie wszystkie aplikacje są idealne, a nie wszystkie zasady są absolutne.

  • używanie bez zakresu może być pomocne w organizowaniu szablonów.
  • używanie dziedziczonego zakresu może pomóc w refaktoryzacji żadnych dyrektyw zakresu. Jest to również przydatne do zarządzania architekturami, które koncentrują się na mutacji danych w drzewie dyrektywy zamiast zwracania małych fragmentów zaktualizowanych danych z powrotem do kontrolera nadrzędnego.
  • dla płynnej migracji Angular 2.0, powinieneś zacząć pracować nad używaniem tylko izolowanego zakresu w swojej aplikacji.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.