2014-01-28 6 views
1

나는 루트 스코프 (rootscope)에서 무엇인가를 지켜보고 응답을하는 서비스를 가지고있다. 그 누구도 그 서비스를 의존성으로 요구하지 않습니다. 서비스가 그 일을 시작한다고 어떻게 알 수 있습니까?독립형 각도 서비스를 시작하는 방법

이것은 내가 지금하는 방법입니다.

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'를 갖는 것이 더 낫다고 생각한다. 이 파일은 당신의 실제 app ('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의 다른 인스턴스를 추가 할 수 있습니다. 속성을 통해 일부 옵션을 전달할 수도 있습니다. 전체적으로 복잡한 행동을 추가하는 것이 더 개방적입니다.

관련 문제