可以在AngularJS中配置控制器(如服务)吗?

时间:2015-02-17 12:52:57

标签: angularjs

我的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

1 个答案:

答案 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
  

这里会发生什么:

     
      
  1. 配置块执行
  2.   
  3. 调用工厂(实例,服务或工厂)
  4.   
  5. 执行
  6.   
  7. 指令集
  8.   
  9. 控制器已初始化
  10.   
  11. 指向链接到页面的指令
  12.   

现在,您可以看到先执行run,然后在几个字后初始化控制器。这就是控制器无法注入app.run()

的原因