AngularJS : broadcast event from directive

标签 angularjs angularjs-scope

我见过人们在代码中的任何位置执行此操作:

$rootScope.$broadcast('someEvent', someParameter); 

然后在某个 Controller 中:

$rootScope.$on('someEvent', function(event, e){ /* implementation here */ });

现在,我想通过指令广播一个事件。在 rootScope 级别广播它是一个好的做法吗?我想在 Controller 中处理这个事件。我可以使用 $scope 吗,还是仍然需要监听 $rootScope ?

最佳答案

In my case, I just want to broadcast an event from a directive to the controller of the view, in which I use the directive. Does it still make sense to use broadcast then?

我会让指令调用 Controller 上的方法,该方法在使用该指令的 HTML 中指定:

对于使用隔离范围的指令:

<div my-dir ctrl-fn="someCtrlFn(arg1)"></div>

app.directive('myDir', function() {
  return {
    scope: { ctrlFn: '&' },
    link: function(scope, element, attrs) {
       ...
       scope.ctrlFn({arg1: someValue});
    }

对于不使用隔离范围的指令:

<div my-dir ctrl-fn="someCtrlFn(arg1)"></div>

app.directive('myDir', function($parse) {
  return {
    scope: true,  // or no new scope -- i.e., remove this line
    link: function(scope, element, attrs) {
       var invoker = $parse(attrs.ctrlFn);
       ...
       invoker(scope, {arg1: someValue} );
    }

关于AngularJS : broadcast event from directive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16199212/

相关文章:

javascript - 如何使用 AngularJS 获取 HTML-INPUT-EMAIL?

javascript - AngularJS 在单击 ng-click ng-repeat 时替换列表

angularjs - Passport.js 中的身份验证,与 Angular JS 一起使用

javascript - 如何在 AngularJS 中将受限范围传递给小部件

javascript - 在 AngularJS Controller 之间共享数据

javascript - Angular JS 中的递归 promise

javascript - 在ionic框架中设置 subview 和路由

angularjs - Angular 1.5 组件 + ng-model $formatters 和 $parsers

angularjs - 从指令模板调用服务方法

javascript - Angular Directive(指令),将点击事件绑定(bind)到外部元素不起作用