我仍然是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/
没有依赖性的不同模块:html" target="_blank">http :
//jsfiddle.net/yrezgui/YedT2/5/
不要调用angular.injector()-这将创建一个新的注射器。相反,将已经创建的内容$injector
注入到控制器中并使用它:
所以代替:
var algoController = function($scope) {
$scope.base64 = angular.injector(['main']).get('base64');
};
做这个:
var algoController = function($scope, $injector) {
$scope.base64 = $injector.get('base64');
};
但是大多数时候,您应该直接而不是动态地注入服务,如下所示:
var algoController = function($scope, base64) {
$scope.base64 = base64;
};
问题内容: 运行期间是否可以注入示波器或控制器?或任何其他建议将服务动态注入控制器? 提前致谢 问题答案: 可以使用$ injector 将服务动态(按名称)注入到控制器中。能够通过控制器参数注入服务只是Angular提供的一种便利。在后台,Angular使用$ injector来检索对象实例。但是我们也可以自己使用$ injector。 小提琴。
问题内容: 以下angular.ui模态示例显示了调用a ,该调用后来被创建为函数: 我有2个问题/问题: 文档建议以其他方式(由于缩小问题)创建控制器,例如: 但是,如果我像这样创建控制器,如何将其注入modalInstance? 我在这里调用的控制器不是Modal Instance控制器,而是我的global ,这是问题吗?我应该以某种方式继承loginCtrl还是从ModalInstance
谢谢你。 更新:我找到了另一个解决方案,并在另一个帖子中发布了答案:https://stackoverflow.com/a/52021965/2580829
有没有可能使控制器依赖于他们的服务,而不是通过使用服务容器,而是通过纯粹的构造函数依赖注入? 我希望以这种方式编写控制器: 不幸的是,正如我所看到的,Symfony ControllerResolver不通过ServiceContainer而是通过简单的调用创建新的控制器实例。
我这段代码可以生效,但是有个问题,不是动态化的。 参数类型我得写UserDto.class,我想动态化,我不知道参数类型到底是什么。
我跟随播放2.6的Scala留档和创建非阻塞操作的示例代码,并遇到一些运行时问题。我已经使用Scala模板创建了一个新的Play应用程序()。 播放留档建议应该在新的控制器中工作的代码是(这段代码逐字取自播放留档页面,从我这里有一些额外的导入): 然后,根据使用其他线程池的文档,我定义了