如何在控制器中注入dynamic依赖
我仍然是Angularjs的一个新手。 我想dynamic地注入一个服务(我创build的)的依赖项在我的控制器中。
但是,当我编码与依赖关系的服务,我得到这个错误:
错误:未知提供者:$ windowProvider < – $ window < – base64
这是控制器的代码。
var base64 = angular.injector(['servicesModule']).get('base64'); console.log("base64", base64.encode("my text will be encoded")); 此代码工作:
 var servicesModule = angular.module('servicesModule', []); servicesModule.factory('base64', function() { return { name: 'base64', readonly: false, encode: function(input) { return window.btoa(input); }, decode: function(input) { return window.atob(input); } }; }); 
此代码不起作用:
 var extModule = angular.module('ext', []); extModule.factory('base64', ['$window', function($window) { return { name: 'base64', readonly: false, encode: function(input) { return $window.btoa(input); }, decode: function(input) { return $window.atob(input); } }; }]); 
另一个问题是服务与控制器在同一个模块中。 如果模块有依赖关系,我不工作(我的$ routeProvider依赖在我的模块configuration):
错误:未知提供者:mainModule的$ routeProvider
 var mainModule = angular.module('main', [], function($routeProvider, $locationProvider) { //Some routing code } ); 
JS小提琴
与依赖项(控制器+服务)相同的模块: http : //jsfiddle.net/yrezgui/YedT2/
具有依赖关系的不同模块: http : //jsfiddle.net/yrezgui/YedT2/4/
不依赖的模块: http : //jsfiddle.net/yrezgui/YedT2/5/
 不要调用angular.injector() – 这会创build一个新的注入器。 相反,将已经创build的$injector到控制器中并使用它: 
所以,而不是:
 var algoController = function($scope) { $scope.base64 = angular.injector(['main']).get('base64'); }; 
做这个:
 var algoController = function($scope, $injector) { $scope.base64 = $injector.get('base64'); }; 
但大多数情况下,您应该直接注入服务,而不是dynamic注入,如下所示:
 var algoController = function($scope, base64) { $scope.base64 = base64; }; 
另请参阅AngularJSdynamic注入作用域或控制器