2016-08-23 74 views
0

在我的指令,指令,我有以下事件定义:检测,如果事件侦听器附加在角

function wizard() { 
    return { 
     scope: { 
      raiseCancel: '&onCancel' 
     }, 

然后再往下,我尝试检查一个侦听器附加。如果没有,我想执行一些默认行为。

if (scope.raiseCancel) scope.raiseCancel(); 
else $window.history.back(); 

但显然scope.raiseCancel总是会truthy因为角分配时没有事件侦听器附加调用angular.noop一个匿名函数。如何检测我的事件是否有听众?

回答

1

您应该将您的raiseCancel作为事件处理程序处理,并返回false以防止默认行为。

当然意味着在raiseCancel处理器(S)代码更改传递

if (scope.raiseCancel == null || scope.raiseCancel() !== false) { 
    $window.history.back(); 
} 
+0

但我想,如果没有事件处理程序发生的默认行为。这将需要一个事件处理程序存在并返回false。 – adam0101

+0

不,如果它什么都没有返回,它就会被执行。您需要返回false而不执行默认行为 –

+0

已编辑该代码段,但是您告诉条件的第一部分可能无用 –