我使用ng-pattern来验证一些表单字段,我使用ng-change来观察和处理任何更改,但是ng-change(或$ scope。$ watch)只会在表单元素位于$ valid state!我是新的角,所以我不知道如何解决这个问题,虽然我怀疑一个新的指令是要走的路。
如何获得ng-change在$ invalid和$ valid表单元素状态中触发,ng-pattern仍然像以前一样设置表单元素的状态?
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小提琴,它显示了我有的问题。
顺便说一下,这个角度问题似乎也是相关的:
https://github.com/angular/angular.js/issues/1296
你可以写一个简单的指令来监听输入事件。
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(); }); }); } }; });