我目前使用
scope.onFocus = function(){ // change scope variables
};
elem.bind('focus', function(){
scope.$apply('onFocus()')});
绑定到指令的链接函数中的焦点事件。
问题是如果我像这样手动触发焦点事件:elem.focus()
在说 ng-click 处理程序中,我将收到“应用正在进行”错误。
检查是否已调用 apply 的解决方法是:if (! scope.$$phase)
?
在调用 apply 之前检查是否被认为是“Angularic”?
还有其他优雅的解决方案吗?
更新:
这是我的解决方案:
由于scope.onFocus
可以触发反过来可以调用的外部事件(Angular 之外)$apply
,因此您将出现“应用已在进行中”错误。诀窍是单独调用$apply
。
element.bind('focus', function(){
scope.onFocus();
scope.$apply(); // don't wrap onFocus call in $apply
})