Всегда я использовал директивный орган ngRequired с условием с undefined, чтобы показывать, что, если переменная отличная в undefined, что способствовал тому, чтобы поле формуляра было обязательное.
<input type="text" name="variable" id="variable" ng-model="variable"
ng-disabled="variable === undefined" ng-required="variable !== undefined">
В мои 3 года с AngularJS (Угловой 1) никогда у меня не была проблема с этим директивным органом, но сейчас он начинает меня, чтобы не удаваться и я не могу понять почему. Проблема, которая дает мне, состоит в том, что, по какому-то разуму, он вводит в цикл директивный орган меняя стоимость "переменной" между стоимостью, которую я даю ему по умолчанию и undefined до тех пор, пока он не блокирует браузер; однако, если я делаю его отличным в null, например, у него нет этого поведения.
Ошибка, которая дает мне консоль браузера:
Uncaught Error: [$rootScope: infdig] 10 $digest() iterations reached.
Aborting!Watchers fired in the last 5 iterations: [
[{
"msg": "fn: function () { var start = perf.now(); var ret = thatScope.$eval(watchExpression); var end = perf.now(); _digestEvents.push({ eventType: 'scope:watch', id: scopeId, watch: watchStr, time: end - start}); return ret;}",
"newVal": true,
"oldVal": false
}, {
"msg": "fn: function () {var start = perf.now();var ret = watchExpression.apply(this, arguments); var end = perf.now(); _digestEvents.push({eventType: 'scope:watch',id: scopeId,watch: watchStr, time: end - start});return ret;}",
"newVal": ""
}, {
"msg": "fn: function () { var start = perf.now();var ret = thatScope.$eval(watchExpression);var end = perf.now();_digestEvents.push({eventType: 'scope:watch',id: scopeId,watch: watchStr,time: end - start});return ret;}",
"newVal": true,
"oldVal": false
}, {
"msg": "fn: function () {var start = perf.now();var ret = thatScope.$eval(watchExpression);var end = perf.now();_digestEvents.push({ eventType: 'scope:watch',id: scopeId,watch: watchStr,time: end - start});return ret;}",
"newVal": true,
"oldVal": false
}],
[{
"msg": "fn: function () {var start = perf.now();var ret = thatScope.$eval(watchExpression);
Поскольку я могу видеть, это какая-то проблема с $watch директивного органа, но я не понимаю, что я изменил себе стоимость моей переменной между стоимостью, которую ему даю я и undefined.
Если он произошел с кем-то немного сходно или знает, как упорядочивать это ему было бы благодарно за это, мне не приходит в голову ничто, чтобы это оплачивать.
Большое спасибо.
Supongo que tiene que ver con el two way data binding y el ciclo digestivo de angular.
Yo te recomiendo que no hagas ese tipo de comparación en la propia vista, si no que la delegues en una función que tengas en el controlador.
Como principal ventaja, está que en caso de fallo (como es tu caso) es mucho más fácil depurarla en el código, ya que en la vista creo y digo creo que no hay ningún debugger.
Además, queda mucho más "saneado" y limpio el código.
Lo que te digo es lo siguiente.
Vista:
<input type="text" name="variable" id="variable" ng-model="variable" ng-disabled="isVariableDisabled()" ng-required="isVariableRequired()">
Controlador:
$scope.isVariableDisabled = () => { // lo que tengas que hacer };
$scope.isVariableRequired = () => { // lo que tengas que hacer };
Espero que depurando eso, al menos te ayude a encontrar el error.
Saludos.