Javascript AngularJS中发出事件后返回值
我想运行一个事件,然后其中一个孩子将能够取消该事件。 在香草中,javascript很简单Javascript AngularJS中发出事件后返回值,javascript,angularjs,Javascript,Angularjs,我想运行一个事件,然后其中一个孩子将能够取消该事件。 在香草中,javascript很简单 form.onsubmit=function(){return false} 问题是,如何在AngularJS事件中执行此操作 这是外部控制器中的代码 $scope.$broadcast('user-want-to-leave',function(value){ if(/*Check is inner controler want to cancel the navigation*/){
form.onsubmit=function(){return false}
问题是,如何在AngularJS事件中执行此操作
这是外部控制器中的代码
$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;
}
})
这是控制器内部的一个代码
$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;
}
})
奖励:这是Angular事件中的任何e.stopPropagation(),就像在jQuery事件中一样
换句话说:我如何从$on
函数返回值到$broadcast
函数
更新:谢谢。这是jsfidle的工作原理:
是的,Angular调用事件处理程序并向其传递一个具有stopPropagation()方法的事件对象
事件侦听器函数格式为:函数(事件,参数…)。传递到侦听器的事件对象具有以下属性:
- 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
更新
最初的问题标题是关于发出的事件,而不是广播的事件……而经过编辑的问题似乎是关于事件处理程序和原始范围之间的双向通信?回答这个问题:事件对象还具有对当前和原始作用域的引用。见上文 如果使用jQuery,那么是的,您可以使用所有jQuery功能,只需导入module@StefanoSaitta,并非全部:-)来自doc for broadcast:首先是什么触发了这种情况?真的不清楚你的具体问题是什么is@charlietfl,使用$broadcast
的post示例他是否应该使用preventDefault()
方法而不是cancel
?但是parnet作用域(调用$broadcast)如何知道event preventDefault标志是否为true?event.defaultPrevented