如何从工厂发出事件

mur*_*a52 31 angularjs

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

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

谢谢,穆尔塔扎

Mat*_*erg 56

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

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

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

  • 这是正确的答案,工厂不能依赖于控制器,因为它们的实时循环完全不同. (2认同)

asg*_*oth 55

您无法将控制器的范围注入服务.你能做的是:

  • 将作用域实例作为参数传递给您的一个服务函数:

例如

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

   return {
      myFunction: function(scope) {
         scope.$emit(...);
         ...
      }
    };
});
Run Code Online (Sandbox Code Playgroud)
  • 将$ rootScope注入您的服务:

例如

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

   return {
      myFunction: function() {
         $rootScope.$emit(...);
         ...
      }
    };
}]);
Run Code Online (Sandbox Code Playgroud)

  • 我不能从根镜上做广播吗? (15认同)