#angularjs
#angularjs
Вопрос:
Я пытаюсь запустить функцию и внедрить в нее службы. Я думал, что это можно было бы легко сделать с помощью $injector
. Итак, я попробовал следующее (упрощенный пример):
angular.injector().invoke( [ "$q", function( $q ) { $q.something(); } ] );
Что приводит к Uncaught Error: [$injector:unpr] Unknown provider: $qProvider <- $q
.
Я знаю, что могу решить эту проблему, используя angular.injector( ["ng"] )
вместо этого, но на самом деле есть еще несколько зависимостей.
Было бы прекрасно, если бы я мог просто получить экземпляр инжектора, который используется везде в моем приложении.
Документация angular.injector
предполагает, что вы можете получить его с angular.element(document).injector()
помощью, но это приводит undefined
ко мне.
Ответ №1:
Вам это не нужно, но вы можете получить $injector вашего приложения, используя корневой элемент вашего приложения (или любой дочерний элемент).
Например, если вы используете ngApp
в теле:
angular.element(document.body).injector();
Комментарии:
1. Как вы сказали, мне, вероятно, это не должно было понадобиться. Мой подход к моей проблеме, вероятно, был неправильным с самого начала. Однако ваш код сработал, как и пример, я просто использовал его в неподходящее время в процессе настройки.
Ответ №2:
Ответ ExpertSystem отлично сработал для меня
Это отлично работает для меня. Я пытаюсь вызвать функцию из службы angular за пределами области angular в событии document «resume» для использования в моем приложении cordova. Вот код, который я использовал
var injector = angular.element(document.body).injector(); //get the document
injector.invoke(['myService', function (myService) {
myService.doSomething();
}]);
Ответ №3:
Попробуйте это:
var $injector = angular.injector(['myApp','ng'])
Потому $location
что вам нужно загрузить приложение на страницу (запустить приложение).:
var $injector = angular.bootstrap(document, ['myApp'])
Это будет возвращать инжектор каждый раз, когда вы его вызываете, но не создаст никаких конфликтов, если скрипт уже был загружен.
Комментарии:
1. Это приводит к
Unknown provider: $rootElementProvider <- $rootElement <- $location
2. Это приведет к тому, что «приложение уже загружено». Я не думаю, что мой подход к проблеме, с которой я столкнулся, был правильным с самого начала.
3. @OliverSalzburg это не для меня, но конечно 🙂
4. Обратите внимание, что этот подход вернет не $injector приложения, а новый экземпляр. Таким образом, вы не можете обмениваться данными и т. Д