Могу ли я сделать функцию доступной в каждом controllerе в угловом?

Если у меня есть функция утилиты foo которую я хочу иметь возможность звонить из любой точки моего объявления ng-app . Есть ли какая-нибудь возможность сделать ее доступной по всему миру в моей настройке модуля или мне нужно добавить ее в область на каждом controllerе?

В основном у вас есть два варианта: определить его как службу или поместить в корневую область. Я бы посоветовал вам избавиться от него, чтобы избежать загрязнения корневой области. Вы создаете сервис и делаете его доступным в своем controllerе следующим образом:

            

Если это не вариант для вас, вы можете добавить его в корневую область следующим образом:

            

Таким образом, все ваши шаблоны могут вызывать globalFoo() не передавая его шаблону с controllerа.

Вы также можете комбинировать их, я думаю:

            

Хотя первый подход рассматривается как «подход, подобный угловому», я чувствую, что это добавляет накладные расходы.

Подумайте, хочу ли я использовать эту функцию myservice.foo в 10 разных controllerах. Мне нужно будет указать эту зависимость «myService», а затем свойство scope scope scope.callFoo во всех десяти из них. Это просто повторение и как-то нарушает принцип СУХОЙ.

Принимая во внимание, что если я использую подход $ rootScope, я определяю эту глобальную функцию gobalFoo только один раз, и он будет доступен во всех моих будущих controllerах, независимо от того, сколько.

У AngularJs есть « Услуги » и « Фабрики » только для таких проблем, как ваши. Они используются для того, чтобы иметь что-то глобальное между Контроллерами, Директивами, другими службами или любыми другими компонентами angularjs. Вы можете определять функции, хранить данные, выполнять вычисления или что угодно хотите внутри Сервисы и использовать их в компонентах AngularJs как Global .like

 angular.module('MyModule', [...]) .service('MyService', ['$http', function($http){ return { users: [...], getUserFriends: function(userId){ return $http({ method: 'GET', url: '/api/user/friends/' + userId }); } .... } }]) 

если вам нужно больше

Узнайте больше о том, почему нам нужны услуги и заводы AngularJs

Я немного новичок в Angular, но то, что мне было полезно сделать (и довольно просто), я сделал глобальный скрипт, который я загружаю на свою страницу перед локальным скриптом с глобальными переменными, которые мне нужны для доступа на всех страницах. В этом скрипте я создал объект, называемый «globalFunctions», и добавил функции, которые мне нужны для глобального доступа в качестве свойств. например globalFunctions.foo = myFunc(); , Затем в каждом локальном скрипте я написал $scope.globalFunctions = globalFunctions; и у меня сразу есть доступ к любой функции, которую я добавил в объект globalFunctions в глобальном скрипте.

Это немного обходное решение, и я не уверен, что это поможет вам, но это определенно помогло мне, так как у меня было много функций, и это была боль, добавляющая все их на каждую страницу.

  • Вычисление средней функции массива Swift
  • Как сделать .lib-файл, когда есть .dll-файл и заголовочный файл
  • Как не членские функции улучшают инкапсуляцию
  • «Правильный» способ указать необязательные аргументы в R-функциях
  • Возrotation функции
  • Синтаксис функции C, типы параметров, объявленные после списка параметров
  • Почему в параметрах C ++ последнее значение должно быть добавлено последними?
  • Макро против функции в C
  • Отправить форму при нажатии Enter с помощью AngularJS
  • Когда функция слишком длинная?
  • Как сделать случайный цвет фона с помощью Swift
  • Давайте будем гением компьютера.