Если у меня есть служебная функция, foo
которую я хочу вызывать из любой точки моего ng-app
объявления. Можно ли как-нибудь сделать его глобально доступным в настройках моего модуля или мне нужно добавить его в область действия каждого контроллера?
191
module.value('myFunc', function(a){return a;});
и затем внедрить его по имени в ваши контроллеры. (Если кто-то хочет избежать предоставления услуги)Ответы:
В основном у вас есть два варианта: либо определить его как службу, либо поместить в корневую область. Я бы посоветовал вам сделать из этого сервис, чтобы не загрязнять корневую область. Вы создаете сервис и делаете его доступным в вашем контроллере следующим образом:
Если это не вариант для вас, вы можете добавить его в корневую область следующим образом:
Таким образом, все ваши шаблоны могут вызывать
globalFoo()
без необходимости передавать его в шаблон из контроллера.источник
foo()
функций? Создание$scope.callFoo()
обертки для каждого из них - это слишком много работы. Как я могу «прикрепить» все функции библиотеки в область видимости, чтобы ее можно было использовать в шаблоне? У меня есть большая библиотека преобразования единиц измерения, и я хочу, чтобы она была доступна в моем шаблоне.$scope.callFoo = myService.foo;
вместо создания новой оболочки в каждом месте, где вы хотите его использовать.Вы также можете объединить их, я думаю:
источник
$rootScope
?Хотя первый подход пропагандируется как «угловой», я чувствую, что это добавляет накладных расходов.
Подумайте, хочу ли я использовать эту функцию myservice.foo в 10 различных контроллерах. Мне нужно будет указать эту зависимость 'myService', а затем свойство области действия $ scope.callFoo во всех десяти из них. Это просто повторение и как-то нарушает принцип СУХОЙ.
Принимая во внимание, что если я использую подход $ rootScope, я указываю эту глобальную функцию gobalFoo только один раз, и она будет доступна во всех моих будущих контроллерах, независимо от того, сколько.
источник
AngularJs имеет « Службы » и « Фабрики » только для таких задач, как ваша. Они используются для того, чтобы иметь что-то глобальное между контроллерами, директивами, другими службами или любыми другими компонентами angularjs. Вы можете определять функции, хранить данные, выполнять функции вычисления или что угодно хочу внутри Сервисов и использовать их в AngularJs Components как Global .like
если вам нужно больше
Узнайте больше о том, зачем нам нужны сервисы и фабрики AngularJs
источник
Я немного новичок в Angular, но мне показалось полезным (и довольно простым) то, что я создал глобальный скрипт, который загружаю на свою страницу перед локальным скриптом с глобальными переменными, к которым мне все равно нужно обращаться на всех страницах. В этом сценарии я создал объект с именем globalFunctions и добавил функции, к которым мне нужен глобальный доступ в качестве свойств. например
globalFunctions.foo = myFunc();
. Затем в каждом локальном сценарии я написал$scope.globalFunctions = globalFunctions;
и сразу получил доступ к любой функции, добавленной в объект globalFunctions в глобальном сценарии.Это немного обходной путь, и я не уверен, что это поможет вам, но это определенно помогло мне, так как у меня было много функций, и было неудобно добавлять их все на каждую страницу.
источник