Невозможно вызвать фабричный метод после включения фабричной функции с $ provide.factory в angular.js - PullRequest
0 голосов
/ 22 сентября 2018
app.config(['$controllerProvider','$compileProvider', '$filterProvider', '$provide',function($controllerProvider,
        $compileProvider, $filterProvider, $provide) {
        app.register = {
          controller: $controllerProvider.register,
          directive: $compileProvider.directive,
          filter: $filterProvider.register,
          factory: $provide.factory,
          service: $provide.service
        };
      }
]);

app.controller('myCntrl', ['$scope', function($s) {
   app.register.factory('customFactory',[customFactory]);
   customFactory.init();
 });

factory.js

function customFactory(){
    var c= {};
    c.init = function(){
        console.log('init function');
    }
    return c;
}

Здесь я буду добавлять файл factory.js во время выполнения, и теперь мне нужно добавить собственную фабрику в мой контроллер.Поэтому я использовал для этого метод $ provide.factory .Но я не могу вызвать init () функцию внутри customFactory

1 Ответ

0 голосов
/ 22 сентября 2018

Внутри контроллера, который динамически регистрирует customFactory, привязка имени customFactory является просто функцией.Чтобы вызвать init() в указанном вами месте, вам нужно вызвать customFactory как функцию.

customFactory().init();

Однако, если у вас есть другой рецепт в другом месте (например, контроллер), которыйдолжен зависеть от customFactory, тогда вы можете получить доступ к init(), как и следовало ожидать.

app.controller('anotherCtrl', ['customFactory', function (customFactory) {
    customFactory.init();  // OK!
}]);

Когда customFactory регистрируется, инжектор зависимостей AngularJS знает, как создать его как одиночный, и впоследствиивы можете просто получить к нему доступ как к значению.

...