Jeśli mam funkcję narzędzia foo
, do której chcę zadzwonić z dowolnego miejsca w mojej ng-app
deklaracji. Czy jest jakiś sposób, że mogę uczynić go globalnie dostępnym w mojej konfiguracji modułu, czy muszę dodać go do zakresu w każdym kontrolerze?
191
module.value('myFunc', function(a){return a;});
a następnie wstrzyknąć go z nazwy do kontrolerów. (Jeśli ktoś chce uniknąć świadczenia usługi)Odpowiedzi:
Zasadniczo masz dwie opcje: albo zdefiniuj ją jako usługę, albo umieść w swoim głównym katalogu. Sugerowałbym, aby zrobić z niego usługę, aby uniknąć zanieczyszczenia zakresu głównego. Tworzysz usługę i udostępniasz ją w kontrolerze w następujący sposób:
Jeśli nie jest to dla ciebie opcja, możesz dodać ją do zakresu głównego w następujący sposób:
W ten sposób wszystkie twoje szablony mogą wywoływać
globalFoo()
bez konieczności przekazywania go do szablonu z kontrolera.źródło
foo()
funkcji? Wykonanie$scope.callFoo()
opakowania dla każdego z nich to zbyt wiele pracy. Jak mogę „dołączyć” wszystkie funkcje biblioteki do zakresu, aby można było jej użyć w szablonie? Mam dużą bibliotekę konwersji jednostek, która ma być dostępna w moim szablonie.$scope.callFoo = myService.foo;
zamiast tworzyć nowe opakowanie w każdym miejscu, w którym chcesz go użyć.Myślę, że można je również łączyć:
źródło
$rootScope
?Chociaż pierwsze podejście jest zalecane jako podejście „kątowe”, czuję, że powoduje to dodatkowe koszty.
Zastanów się, czy chcę użyć tej funkcji myservice.foo w 10 różnych kontrolerach. Będę musiał określić tę zależność „myService”, a następnie właściwość zakresu $ scope.callFoo we wszystkich dziesięciu. Jest to po prostu powtórzenie i w jakiś sposób narusza zasadę OSUSZANIA.
Natomiast jeśli używam metody $ rootScope, tę globalną funkcję określam tylko raz i będzie ona dostępna we wszystkich moich przyszłych kontrolerach, bez względu na to, ile z nich.
źródło
AngularJs ma „ Usługi ” i „ Fabryki ” tylko na takie problemy, jak twoje. Są one używane, aby mieć coś globalnego między kontrolerami, dyrektywami, innymi usługami lub innymi komponentami angularjs. Możesz definiować funkcje, przechowywać dane, wykonywać funkcje obliczeniowe lub cokolwiek innego chcą wewnątrz usług i korzystania z nich w angularjs Components jako globalnego .like
jeśli potrzebujesz więcej
Dowiedz się więcej o tym, dlaczego potrzebujemy usług i fabryk AngularJs
źródło
Jestem trochę nowszy od Angulara, ale moim zdaniem użyteczne (i dość proste) jest to, że stworzyłem skrypt globalny, który ładuję na swoją stronę przed skryptem lokalnym ze zmiennymi globalnymi, do których i tak muszę uzyskać dostęp na wszystkich stronach. W tym skrypcie utworzyłem obiekt o nazwie „globalFunctions” i dodałem funkcje, do których muszę mieć dostęp globalnie jako właściwości. np
globalFunctions.foo = myFunc();
. Następnie w każdym skrypcie lokalnym pisałem$scope.globalFunctions = globalFunctions;
i mam natychmiastowy dostęp do dowolnej funkcji dodanej do obiektu globalFunctions w skrypcie globalnym.Jest to trochę obejścia i nie jestem pewien, czy ci to pomaga, ale zdecydowanie mi pomogło, ponieważ miałem wiele funkcji i dodawanie ich wszystkich na każdej stronie było uciążliwe.
źródło