我的CartDropdownController
可以配置(即设置autoCloseDelay
),我面临以下问题:如何注入控制器 {{1}方法?
angular.run()
我知道可以在angular.module('app')
.controller('CartDropdownController', ['$scope', function ($scope) {
this.autoCloseDelay = 3000;
this.setAutoCloseDelay = function (autoCloseDelay ) {
this.autoCloseDelay = autoCloseDelay;
};
// $scope variables here...
}]);
中注入服务(如.run()
),但我的控制器不是服务(我不知道如何将其作为服务......)。
修改:为什么?我不希望我的控制器依赖于值/常量:
$http
答案 0 :(得分:1)
docs说You can only inject instances (not Providers),而控制器本身也是一个实例,就像服务一样。
现在看到这个example:
var myApp = angular.module('myApp', []);
myApp.factory('aProvider', function() {
console.log("factory invoked");
return{
fun:function(from){
console.log("factory from"+from);
}
}
});
myApp.directive("test1", function() {
console.log("directive setup");
return {
compile: function() {console.log("directive compile");}
}
});
myApp.directive("test2", function() {
return {
link: function() {console.log("directive link");}
}
});
myApp.run(function(aProvider) {
console.log("app run");
// aProvider.fun('from run');
});
myApp.config( function() {
console.log("app config");
});
myApp.controller('myCtrl', function($scope) {
console.log("app controller");
});
结果:
app config
(index):24 factory invoked
(index):46 app run
(index):33 directive setup
(index):35 directive compile
(index):56 app controller
(index):41 directive link
这里会发生什么:
- 配置块执行
- 调用工厂(实例,服务或工厂)
- 执行
- 指令集
- 控制器已初始化
- 指向链接到页面的指令
醇>
现在,您可以看到先执行run,然后在几个字后初始化控制器。这就是控制器无法注入app.run()