我仍然是 Angularjs 的新手。我想在我的控制器中动态注入服务(我创建的)的依赖项。
但是,当我编写具有依赖项的服务时,我得到了这个错误:
错误:未知提供程序:$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 依赖项):
错误:未知提供者:来自 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/