当前位置: 首页 > 面试题库 >

Angular.js-ng-pattern为$ invalid时不触发ng-change

梁宪
2023-03-14
问题内容

我正在使用ng-pattern来验证某些表单字段,并且正在使用ng-change来监视和处理任何更改,但是ng-change(或$ scope。$
watch)仅在form元素位于$有效状态!我对angular还是陌生的,所以我不知道如何解决这个问题,尽管我怀疑应该采用新的指令。

在ng-pattern仍然像以前一样设置表单元素状态的情况下,如何在$ invalid和$ valid表单元素状态下触发ng-change?

HTML:

<div ng-app="test">
  <div ng-controller="controller">
    <form name="form">
        <input type="text" name="textbox" ng-pattern="/^[0-9]+$/" ng-change="change()" ng-model="inputtext"> Changes: {{ changes }}
    </form>

    <br>
    Type in any amount of numbers, and changes should increment.

    <br><br>
    Now enter anything that isn't a number, and changes will stop incrementing. When the form is in the $invalid state, ng-change doesn't fire.

    <br><br>
    Now remove all characters that aren't numbers. It will increment like normal again. When the form is in the $valid state, ng-change will fire.

    <br><br>
    I would like ng-change to fire even when the the form is $invalid.

    <br><br>
        form.$valid: <font color="red">{{ form.$valid }}</font>

  </div>
</div>

Javascript:

angular.module('test', []).controller('controller', function ($scope) {
    $scope.changes = 0;
    $scope.change = function () {
        $scope.changes += 1;
    };
});

我创建了一个工作的JS小提琴,它显示了我遇到的问题。

http://jsfiddle.net/JAN3x/1/

顺便说一下,这个角度问题似乎也很相关:https
:
//github.com/angular/angular.js/issues/1296


问题答案:

编辑 回答ng-model-options不可用时。请查看投票最多的答案。

您可以编写一个简单的指令来监听input事件。

HTML:

<input type="text" name="textbox" ng-pattern="/^[0-9]+$/" watch-change="change()" ng-model="inputtext"> Changes: {{ changes }}

JS:

app.directive('watchChange', function() {
    return {
        scope: {
            onchange: '&watchChange'
        },
        link: function(scope, element, attrs) {
            element.on('input', function() {
                scope.$apply(function () {
                    scope.onchange();
                });
            });
        }
    };
});

http://jsfiddle.net/H2EAB/



 类似资料:
  • 问题内容: 输入如下: 当我手动键入并更改输入时,将执行。但是,如果我以编程方式通过其他功能更改了repair.test值,则不会触发ng- change的操作。我已经阅读了角度教程,这可能是预期的行为。 https://docs.angularjs.org/api/ng/directive/ng更改 “当值更改来自模型时,不评估表达式。” <-我也需要这个。模型以任何方式更改时,如何在控制器中触

  • 问题内容: 使用angular.js给出以下代码 此处的Plunkr:http://plnkr.co/edit/i4MAzs HTML: Javascript: 当您点击“ Value2”标签时,click事件将触发两次。仅当ng-click附加到标签时才会发生这种情况。将其附加到输入元素后,所有内容都会按预期工作。 有人可以解释发生了什么吗? 问题答案: 另外,我还编辑了您的plnkr以显示事件

  • 问题内容: 我想显示一个灯箱,其内容由ng-show显示,但是我不知道如何触发灯箱JS。我正在寻找类似的东西 问题答案: 我认为,最好监视绑定ng- show的模型。 这是示例: 和小提琴

  • 问题内容: 我创建了以下示例,以便您可以确切了解正在发生的事情:http : //jsfiddle.net/8t2Ln/101/ 如果我使用ng-options,也会发生同样的事情。我这样做有不同的原因,但由于简化了示例,所以省略了这一部分。 如您所见,默认情况下它具有两个选项。我将在选择旁边显示ng- model的选择值,以便您可以看到它的含义。当您在顶部添加第三个选项时,它会将值设置为该新选项

  • 问题内容: 我使用的是ng-click,将其应用于SPAN标签时会触发两次。 HTML 控制器 它应该只发射一次。我如何找到这种情况的发生原因以及如何解决? 问题答案: 您提供的代码不会两次触发该事件: http://jsfiddle.net/kNL6E/(单击) 也许您两次包含Angular?如果执行此操作,则会收到两个警报,如下所示: http://jsfiddle.net/kNL6E/1/

  • 问题内容: 我有一个选择标签,如下所示: 并且我为此使用了jQueryUI控件(组合框),则从jQuery触发的事件“更改”不会触发doSomething()。 您知道如何从外部角度触发ng-change吗? 问题答案: 糟糕-这是很糟糕的做法-但您可以使用目标控制器中驻留的元素并从中获取。 例: Javascript: 现在,您的变量可以访问控制器上定义的所有方法。