Czym są "dekoratorzy" i jak są wykorzystywane?
Jestem ciekaw, co dokładnie dekoratorzy są w AngularJS. W Internecie nie ma zbyt wiele informacji dla dekoratorów poza blurb w dokumentacji AngularJS i krótką (choć interesującą) wzmiankę w wideo na youtube.
Jak to ujęli kanciarze dekoratorem jest:
Dekoracja serwisu, pozwala dekoratorowi przechwycić usługę tworzenie instancji. Zwracana instancja może być oryginalną instancją, lub nowej instancji, która deleguje do oryginalna instancja.
Naprawdę Nie wiem, co to oznacza , i nie jestem pewien, dlaczego oddzieliłeś tę logikę od samego serwisu. Na przykład, gdybym chciał zwrócić coś innego w różnych warunkach, po prostu przekazałbym różne argumenty do odpowiednich funkcji lub użyłbym innej funkcji dzielącej ten Prywatny stan.
Nadal jestem trochę AngularJS noob więc jestem pewien, że to tylko ignorancja i / lub złe nawyki, które wychwyciłem.
5 answers
Dobrym przypadkiem użycia $provide.decorator
jest sytuacja, gdy musisz wykonać drobne "tweak" na jakiejś zewnętrznej / upstreamowej usłudze,od której zależy twój moduł, pozostawiając usługę nienaruszoną (ponieważ nie jesteś właścicielem / opiekunem usługi). Tutaj {[3] } jest demonstracja na plunkr.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-12 09:41:48
Dekoratorzy pozwalają nam oddzielić przekrojowe obawy i umożliwić służbom zachowanie zasady jednolitej odpowiedzialności bez martwienia się o kod" infrastruktury".
Praktyczne zastosowania dekoratorów:
- buforowanie: jeśli mamy usługę, która wykonuje potencjalnie drogie połączenia HTTP, możemy zawinąć usługę w dekorator buforowania, który sprawdza lokalny magazyn przed wykonaniem zewnętrznego połączenia.
- debugowanie/ śledzenie: mieć przełącznik w zależności od Twojego konfiguracja rozwoju/produkcji, która dekoruje usługi opakowaniami do debugowania lub śledzenia.
- Dławienie : zawijanie często wyzwalanych wywołań w opakowaniu debouncingowym. Umożliwia nam na przykład łatwą interakcję z usługami ograniczonymi stawkami.
We wszystkich tych przypadkach ograniczamy kod w Serwisie do jego głównej odpowiedzialności.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-17 13:24:12
decorator
może przechwycić instancję usługi utworzoną przez factory, service, value, provider
i daje opcje do zmiany niektórych instance(service)
, które w przeciwnym razie nie są konfigurowalne / z opcjami.
Może również dostarczać przykładowe instancje do celów testowych, na przykład $http
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-21 04:59:08
W prostym słowie możemy powiedzieć, że jest to jak metoda rozszerzenia. Dla Ex. Mamy klasę i ma ona dwie metody i w czasie uruchomienia chcemy dodać do niej więcej metod wtedy użyjemy dekoratora.
Nie możemy użyć $provide.dekorator z stałymi, ponieważ nie możemy zmienić stałych są one Falling tylko do odczytu właściwości.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-12 15:42:36
W skrócie dekoratory można opisać następująco: -
Funkcja dekoratora przechwytuje Tworzenie usługi, pozwalając jej aby nadpisać lub zmodyfikować zachowanie usługi.
Korzysta z usługi $provide
przez angular i modyfikuje lub zastępuje implementację innej usługi
$provide.decorator('service to decorate',['$delegate', function($delegate) {
// $delegate - The original service instance,
// which can be replaced, monkey patched,
// configured, decorated or delegated to.
// ie here what is there in the 'service to decorate'
// This function will be invoked,
// when the service needs to be provided
// and should return the decorated service instance.
return $delegate;
}]);
Przykład:
$provide.decorator('$log', ['$delegate', function($delegate) {
// This will change implementation of log.war to log.error
$delegate.warn = $delegate.error;
return $delegate;
}]);
Aplikacje
Oprócz @jbland odpowiedz.
-
Ustawienia regionalne aplikacji:-
Możesz tutaj znajdziesz Przykład -
Changiging domyślne zachowanie i istniejąca implementacja usługi przez usługę kątową:-
Możesz znaleźć przykład tutaj
Zachowanie przełączania funkcji w różnych środowiskach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-20 03:24:58