Ho un orologio che fa scattare un evento DOM:
scope.$watch(function() { return controller.selected; }, function(selected) {
if (selected) {
$input.trigger('focus');
}
});
Il problema è che ho un gestore su 'focus' che fa un scope.$apply
.
$input.bind('focus', function() {
scope.$apply(function() { controller.focused = true; });
});
Così, quando il mio $watch
viene sparato dall'interno di una $digest
che causa un errore perché cerca di innescare un altro $digest
.
La soluzione temporanea che ho è di mettere il trigger in un $timeout
.
scope.$watch(function() { return controller.selected; }, function(selected) {
if (selected) {
$timeout(function() { $input.trigger('focus'); });
}
});
Questo funziona ... finora. È questo il modo corretto di gestirlo? Non sono sicuro se questo catturi ogni caso e vorrei vedere se c'è un modo approvato angolare per avere un pezzo di codice di rinvio dopo il digest.
Grazie!
$ input.trigger ('focus') -> sta cercando di impostare lo stato attivo su un elemento di input? – ganaraj
sì ... sembra che io possa semplicemente fare '$ input.focus()'. – anonymous