我真的想尝试解决这个问题,但到目前为止还没有成功。
观点:
<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>
我要做的是基本上将“action()”替换为我从修改rootScope的服务发送的变量。
在服务中:
$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)angular.js parsing value in ng-click 2)Angular JS ng-click action function as string
答案 0 :(得分:1)
如果您的函数只需要访问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
这可能会导致意外行为。