我有以下服务:
var module = angular.module('app', []);
module.service('service', function(dep){
});
并且假设我需要在我的代码中的某个地方实例化它,具有与默认依赖项不同的依赖项。
//service is injected with the default 'dep' dependency
module.controller('controller', function(service, $injector) {
//I need to call the service with my custom dependency
//but $injector does not help, because it only gives back
//the already injected service object
var injectedService = $injector.get('service')
//So theoretically I would need something like this
//but I did not find such a feature yet
var customDep = {...}
var serviceWithCustomDep = $injector.inject('service', [customDep]);
});
有没有办法实现这个目标?
答案 0 :(得分:1)
简而言之:使用$injector.invoke
函数来调用注入了依赖项的函数。
定义一个工厂(或服务),它将返回一个你将使用你想要的依赖项调用的函数。
module.factory('myFactory', function () {
return function () {
//do stuff here with dependencies injected
};
});
然后在您的控制器中,例如:
module.controller('MyController', function (myFactory, $injector) {
//define the dependencies you want, for example:
myFactory.$inject = ['$http', '$location'];
$injector.$invoke(myFactory);
});
通过这种方式,您可以根据需要更改调用myFactory
函数的依赖关系,只需要修改函数的$inject
属性。
以下是包含更多信息的链接:https://docs.angularjs.org/guide/di