AngularJS - Проблема с ngRequired и условие undefined

Всегда я использовал директивный орган 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.

Если он произошел с кем-то немного сходно или знает, как упорядочивать это ему было бы благодарно за это, мне не приходит в голову ничто, чтобы это оплачивать.

Большое спасибо.

0
задан 25.08.2019, 20:48
0 ответов

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.

1
ответ дан 03.12.2019, 17:03
  • 1
    Привет, tambié n я это сделал, я monté funció n, чтобы видеть, если переменная, чем внутри có я говорю, despué s ответ back изменяла переменная undefined в " " он подтвердит это мне и я увидел то, что он комментировал, он входит в funció n однажды с переменной со стоимостью " " и снова с undefined. Я начал очищать, чтобы видеть где podrí когда я меняю стоимость, но в ningú n момент я помещаю переменную в undefined. –  14.02.2017, 18:46
  • 2
    Из-за какой-то razó n watch, который делает угловой в директивном органе ngRequired, ему не нравится эта comprobació n undefined. В древних версиях углового как 1.2.9 функционирует верно condició n, который я поместил наверху, но сейчас он ему не нравится. То, что я сделал, состоит в том, чтобы зависеть от другого pará метр, который они будут перемещать меня с back, чтобы предотвращать этот локон с ngRequired, и который я думаю, что он будет являться má s ló gico (который они показали мне с true или false поля, которым они хотят дать возможность и которые обязательные). –  14.02.2017, 18:49
  • 3
    Большое спасибо. –  14.02.2017, 18:49