如何在控制器中动态注入依赖
如何在控制器中动态注入依赖
我在AngularJS上还是一个新手。
我想在我的控制器中动态注入一个我创建的服务的依赖项。
但是当我编写一个带有依赖项的服务时,我得到了以下错误:
错误:未知的提供者:$windowProvider <- $window <- base64
这是控制器的代码。
var base64 = angular.injector(['servicesModule']).get('base64'); console.log("base64", base64.encode("将被编码的文本"));
这段代码可以正常工作:
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的依赖项):
错误:未知的提供者:$routeProvider 来自 mainModule
var mainModule = angular.module('main', [], function($routeProvider, $locationProvider) { //一些路由代码 } );
JS Fiddles
具有依赖项的相同模块(控制器+服务):http://jsfiddle.net/yrezgui/YedT2/
具有依赖项的不同模块:http://jsfiddle.net/yrezgui/YedT2/4/
没有依赖项的不同模块:http://jsfiddle.net/yrezgui/YedT2/5/