有没有办法在没有DI的情况下将Angular Service初始化为控制器

时间:2014-12-30 15:52:04

标签: angularjs

我有service like this

function BroadcastClock($interval, $rootScope){
    this.ticker = $interval(function(){
        console.log("Tick");
        $rootScope.$emit('clockTick');
    }, 1000);
}
function ClockService($interval, $rootScope) {
    var clock = new BroadcastClock($interval, $rootScope);
}

除非我将控制器更改为声明

,否则这不起作用
app.controller('MainCtrl', function($scope, $rootScope, clockService)

在更复杂的情况下(比如多条路线),这实际上没有任何理由增加额外注入。有什么更好的方法来解决这个问题?

试图澄清一下(我不会得到-1但是无论如何)

我在这里遇到的问题是我不需要使用实际的控制器来初始化服务。事实上,该服务可以提供给多个控制器。单例方面可以帮助我为所有控制器保留一个时钟。

但是,控制器本身不会仅通过rootScope广播的代理与其交互,因此我认为不需要将其注入实际控制器。

有关更多信息,请参阅plunker,但是,当您更改

时,它将不起作用
app.controller('MainCtrl', function($scope, $rootScope)
//To
app.controller('MainCtrl', function($scope, $rootScope, clockService) 

它工作正常,除了收听广播之外,我们不会对服务“做”任何事情,因此注入没有任何意义。

1 个答案:

答案 0 :(得分:1)

因为你实例化BroadcastClock,我认为你仍然可以通过暴露它或暴露处理它的函数来通过服务来处理它。

无论如何,您可以在提供程序注入时运行.config()初始化块,或者在应用程序运行时开始运行初始化块.run()

app.run(function($interval, $rootScope) {
  var clock = new BroadcastClock($interval, $rootScope);
});