在AngularJS中发出事件后返回值

时间:2015-12-31 14:19:04

标签: javascript angularjs

我想要运行一个事件,然后其中一个孩子将能够取消该事件。 在vanilla-javascript很容易 form.onsubmit=function () {return false}

问题是,如何在AngularJS events

中执行此操作

这是外部控制器中的代码

$scope.$broadcast('user-want-to-leave',function(value){
     if(/*Check is inner controler want to cancel the navigation*/){
          do_not_navigate()
     }
     else {
         navigate()
     }
})

这是内部控制器中的代码

$scope.on('user-want-to-leave',function(e){
    // The inner contoller, want to cancel the event.
    e.cancel=true
    return false;           
   }
})

Bonus:这是Angular事件中的任何e.stopPropagation(),就像在jQuery事件中一样?

换句话说:我如何将$on函数的值返回到$broadcast函数?

enter image description here

更新:谢谢。这是JSFidlle的工作:http://jsfiddle.net/HB7LU/21727/

var myApp = angular.module('myApp',[]);
function MyCtrl($scope,$timeout) {
        $timeout(function(){
     var e=$scope.$broadcast('event')
     alert(e.defaultPrevented)
    })
}

function MyCtrlInner($scope) {
    $scope.$on('event',function(e){
        e.preventDefault()
        })
}

1 个答案:

答案 0 :(得分:3)

是的,Angular $scope.$on method调用事件处理程序并将事件对象传递给具有stopPropagation()方法的事件对象。

  

事件监听器函数格式为:function(event,args ...)。传递给侦听器的事件对象具有以下属性:

     
      
  • targetScope - {Scope}:事件为$ emit-ed或$ broadcast-ed的范围。
  •   
  • currentScope - {Scope}:当前处理事件的范围。事件通过范围层次结构传播后,此属性将设置为null。
  •   
  • name - {string}:事件名称。
  •   
  • stopPropagation - {function =}:调用stopPropagation函数将取消进一步的事件传播(仅适用于$ emit-ed的事件)。
  •   
  • preventDefault - {function}:调用preventDefault将defaultPrevented标志设置为true。
  •   
  • defaultPrevented - {boolean}:如果调用了preventDefault,则为true。
  •   

<强>更新

原始问题标题是关于发出的事件,而不是广播......并且编辑的问题似乎是关于事件处理程序和原始范围之间的双向通信?要回答这个问题:事件对象还引用了当前和原始范围。往上看。