我有一个触发DOM事件的手表:
scope.$watch(function() { return controller.selected; }, function(selected) {
if (selected) {
$input.trigger('focus');
}
});
Run Code Online (Sandbox Code Playgroud)
问题是我在'焦点'上有一个处理程序scope.$apply.
$input.bind('focus', function() {
scope.$apply(function() { controller.focused = true; });
});
Run Code Online (Sandbox Code Playgroud)
因此当我$watch从内部触发$digest它时会导致错误,因为它试图触发另一个错误$digest.
我的解决方法是将触发器放入$timeout.
scope.$watch(function() { return controller.selected; }, function(selected) {
if (selected) {
$timeout(function() { $input.trigger('focus'); });
}
});
Run Code Online (Sandbox Code Playgroud)
这工作......到目前为止.这是处理这个问题的正确方法吗?我不确定这是否能抓住每一个案例,并且想知道是否有一个有角度的批准方式让一段代码推迟到摘要之后.
谢谢!