33

How can I emit events from a factory or service. I am unable to inject $scope into the factory, thus unable to emit events.

I get the following error - Unknown provider: $scopeProvider <- $scope

Thanks, Murtaza

4

3 に答える 3

60

$scope の代わりに $rootScope を注入し、$rootScope で発行します。

myApp.factory('myFactory', ['$rootScope', function ($rootScope) {
    $rootScope.$emit("myEvent", myEventParams);
}]);

ファクトリは、現在のコントローラー/ディレクティブ スコープにアクセスできません。ただし、アプリケーションのルートにはアクセスできるため、$rootScope を使用できます。

于 2012-12-27T15:20:14.270 に答える
55

コントローラーのスコープをサービスに挿入することはできません。あなたができることは次のとおりです。

  • スコープ インスタンスをパラメーターとしてサービス関数の 1 つに渡します。

例えば

app.factory('MyService', function() {

   return {
      myFunction: function(scope) {
         scope.$emit(...);
         ...
      }
    };
});
  • $rootScope をサービスに挿入します。

例えば

app.factory('MyService', ['$rootScope', function($rootScope) {

   return {
      myFunction: function() {
         $rootScope.$emit(...);
         ...
      }
    };
}]);
于 2012-12-27T15:22:50.930 に答える