33

如何从工厂或服务发出事件。我无法将 $scope 注入工厂,因此无法发出事件。

我收到以下错误 - Unknown provider: $scopeProvider <- $scope

谢谢,穆尔塔萨

4

3 回答 3

60

注入 $rootScope 而不是 $scope,然后在 $rootScope 上发出它。

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

工厂无权访问当前的控制器/指令范围,因为没有。他们确实可以访问应用程序的根目录,这就是 $rootScope 可用的原因。

于 2012-12-27T15:20:14.270 回答
55

您不能将控制器的作用域注入服务。你可以做的是:

  • 将范围实例作为参数传递给您的服务功能之一:

例如

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 回答
-1

在您的工厂中注入 $rootScope as-

myApp.factory('myFactory',function($rootScope){
return({
// use $rootScope as below to pass myEventParams to all below in hierarchy
$rootScope.$broadcast("myEvent",myEventParams);

})
}]);
于 2017-05-19T09:45:26.483 回答