1

我真的在尝试解决这个问题,但到目前为止还没有成功。

风景:

<div class="col-md-4 col-xs-4 col-sm-4">
<div ng-click="action()" class="nav-link">Click me for an action in scope  </div>
</div>

我要做的基本上是用我从修改 rootScope 的服务发送的变量替换“action()”。

在服务中:

 $scope.myAction = function() {
     $scope.$broadcast("actionEvent");
  }

我想达到的目标:

<div class="col-md-4 col-xs-4 col-sm-4">
<div ng-click="myAction()" class="nav-link">Click me for an action in scope  </div>
</div>

但是当我尝试替换它时,ng-click 无法识别该操作。文本显示正常,但未执行操作。

知道如何从 rootScope 添加此操作以使其在 ng-click 中执行吗?

期待您的回答,谢谢!

顺便说一句,我尝试了这些选项:

1) ng-click 中的 angular.js 解析值 2) Angular JS ng-click 动作函数作为字符串

4

1 回答 1

2

如果您的函数只需要访问 rootScope,则不需要将 scope 函数放在服务内。只需将 rootScope 注入控制器然后使用它。

module.controller("myctrl", function($scope, $rootScope){
 $scope.myAction = function() {
     $rootScope.$broadcast("actionEvent");
  };
});

如果您的函数对服务进行了某些操作,请将该函数设为该服务的成员,然后在您的 ng-click 中使用该服务。

module.service("MyService", function($rootScope){
 this.myAction = function() {
     $rootScope.$broadcast("actionEvent");
     // other stuff
  };
});

在你的控制器中

module.controller("myctrl", function($scope, MyService){
    $scope.ms = MyService;
});

在标记中

<div ng-click="ms.myAction()" class="nav-link">Click me for an action in scope  </div>

请注意,注入$scope服务没有意义,它根本没有范围。$rootScope是不同的,因为它是您的服务可以依赖的另一项服务。另请注意,您不应该这样做$scope.myAction = MyService.myAction可能会导致意外行为。

于 2014-06-19T14:11:02.827 回答