У меня странная проблема в приложении AngularJS.Ошибка является классической $digest already in process
ошибкой.Я гуглил и смотрел на похожие вопросы, но ни одно из предложенных решений не сработало.Ошибка происходит в дочернем компоненте.Дочерний компонент - это просто оболочка для обычного ввода текста с некоторыми стилями.ng-model
дочернего компонента связан с item
, передаваемым в качестве ввода.События дочернего компонента, когда входные данные focused
и blurred
.Иерархия компонентов выглядит следующим образом: родительский компонент, который является модальным, дочерний компонент является текстовым вводом.Родительский компонент (модальный) может быть закрыт с помощью клавиши ESC.Ошибка появляется, если я открываю модальное окно, выбираю вход (ничего не набираю в нем) и затем закрываю его с помощью клавиши ESC.
Вот шаблон дочернего компонента
<div class="input-group has-feedback"'
ng-class="{'has-error' : vm.item.errors.length > 0 ,
'has-success' : vm.item.isFulfilled}">
<div class="input-group-addon">
<i class="fa fa-asterisk"></i>
</div>
<input
ng-model="vm.item.pendingBarcode"
type="text"/>
</div>
Вот дочерний компонент JS
.component('rfidInput', {
templateUrl:
'swipeables/templates/swipeables.rfidReader.tpl.html',
controllerAs: 'vm',
bindings: {
item: '<',
id: '<',
onFocus: '&',
onBlur: '&',
focus: '<'
},
controller: function() {
this.onInputFocus = function() {
if(typeof this.onFocus === 'function') {
this.onFocus({index:this.id})
}
}
this.onInputBlur = function() {
if(typeof this.onBlur === 'function') {
this.onBlur({item:this.item});
}
}
}
})
Я изменил шаблон дочернего компонента до ng-model
, на самом деле есть также привязки ng-blur
и ng-focus
, но я удалил их, чтобы развернутьисточник.
Вот как родительский шаблон использует дочерний шаблон
<rfid-input on-blur="fulfill(item)" focus="currentFocusedScanIndex"
on-focus="onScanFocus(index)" item="item" id="$index">
</rfid-input>
Теперь, что чрезвычайно интересно, это то, что ошибка возникает только тогда, когда я нажимаю на вход, а затем закрываю модальное окно.Ошибка не произойдет, если я открою модальное и закрою его снова без выбора входа ...
Я в растерянности и не знаю, как заставить это работать.Я также попробовал решения $timeout
, чтобы запустить onFocus
и onBlur
после тайм-аута $, чтобы не мешать текущему циклу $ digest.
Любая помощь или предложения, как решить эту проблему, будет принята с благодарностью.Если есть также несколько советов о том, как изменить этот дочерний компонент, это тоже было бы здорово.