2014-01-28 65 views
1

我有一個服務,在rootcope上觀看的東西,並做出迴應。沒有人要求服務作爲依賴。我如何讓服務開始做它的事情?如何開始一個獨立的角度服務

這就是我現在的做法。

angular.module('app') 
.service('myService', function ($rootScope) { 

    return function() { 
     $rootScope.$on("...", function() { 
     //do stuff 
     }); 
    }; 

}) 
.run(function (myService) { 
    myService(); 
}); 

有沒有更乾淨的方法來做到這一點?

+0

我不認爲它可以比這更乾淨... – dtheodor

+1

我是OP。現在,我已經與這種自啓動服務住了一段時間,我建議不要這個想法。擁有自行啓動的服務可能會干擾其他服務的單元測試。我認爲最好有一個'application-start.js'手動啓動所有這些服務。該文件將在您的真實應用程序('index.html')中,但不在您的測試中('karma.config.js')。 – Sylvain

回答

0

我實現了類似的事情,但使用的指令,而不是一種服務:

app.directive('myDirective', function() { 
    return { 
    controller: function($scope) { 
     $scope.$on('myEvent', function() { 
     // Do stuff 
     }); 
    } 
    } 
}); 

然後用這個在我的應用程序的根元素,它可以,例如,是body

<body ng-app="app" my-directive> 

以這種方式使用指令而不是服務的好處是它使它不那麼全局/最終。例如,如果您最終希望某些示波器無法向此處理程序發送$emit事件,則可以將myDirective移動到另一個元素。或者你也許可能會想要你的應用程序的一部分對myEvent稍有不同,所以你可以添加myDirective的另一個實例,也許可以通過屬性傳遞一些選項。總體而言,它增加了對複雜行爲的更多開放。