Подтвердить что ты не робот

AngularJS динамически вводит область или контроллер

Можно ли вводить область или контроллер во время работы? или любые другие рекомендации по динамическому внедрению услуг в контроллер?

Application.controller('IndexController', function($scope){

    // some actions

    if(someconditions) {
            $scope.$inject = [someServiceName];
            // and here i want to use service methods 
    }

});

Заранее спасибо

4b9b3361

Ответ 1

Служба может динамически вводиться (по имени) в контроллер с помощью $injector. Возможность ввода услуг через аргументы контроллера - это просто удобство, которое предоставляет Angular. Под капотом инжектор $используется Angular для извлечения экземпляров объекта. Но мы можем также использовать и инжектор $.

function MyCtrl($scope, $injector) {
  $scope.doSomething = function(someService) {
    var service = $injector.get(someService)  // someService contains the name of a service
    service.value += 10
}

Fiddle.

Ответ 2

Ниже приведен один случай, с которым я столкнулся недавно, Я пытался ввести службу "myService" в Factoy и получил следующую ошибку.

**Uncaught Error:** *[$injector:cdep] Circular dependency found: $http <- $modal <- myService <- interceptorFactory <- $http <- $templateRequest <- $compile*

[http://errors.angularjs.org/1.3.0/$injector/cdep?p0=%24http%20%3C-%20%24mod%E2%80%A6orFactory%20%3C-%20%24http%20%3C-%20%24templateRequest%20%3C-%20%24compile][1]

Чтобы решить эту проблему, $injector стал спасателем

var service = $injector.get('myService') //this will create a dynamic service instance 

и теперь вы можете использовать эту услугу аналогично тому, как вы использовали другие службы в своем приложении.