2
我有一個要求,只有當輸入模糊或輸入時按下才能更新模型,並且錯誤/成功消息僅在輸入後顯示而不顯示。 以前我是用AngularJS 1.2 RC2和有下面的代碼:僅適用於模糊的AngularJS更新模型
的Javascript:
angular.module('app', []).directive('ngModelOnblur', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ngModelCtrl) {
if (attrs.type === 'radio' || attrs.type === 'checkbox') { return; }
var update = function() {
scope.$apply(function() {
ngModelCtrl.$setViewValue(element.val().trim());
ngModelCtrl.$render();
});
};
element.off('input').off('keydown').off('change').on('focus', function() {
scope.$apply(function() {
ngModelCtrl.$setPristine();
});
}).on('blur', update).on('keydown', function (e) {
if (e.keyCode === 13) {
update();
}
});
}
};
})
.controller('Ctrl', ['$scope', function ($scope) {
$scope.getClass = function (input) {
if (input.$pristine) { return ''; }
return input.$invalid ? 'has-error' : 'has-success';
};
}]);
HTML:
<div ng-controller="Ctrl">
<form name="form" novalidate>
<div ng-class="getClass(form.firstname)">
<input type="text" name="firstname" ng-model="firstname" ng-model-onblur ng-pattern="/^\d{4}$/" />
<div class="error">error</div>
<div class="success">success</div>
$pristine: {{form.firstname.$pristine}}
</div>
</form>
</div>
CSS:
.error, .success {
display: none;
}
.has-error .error, .has-success .success {
display: block;
}
但自從我升級到RC3,事情開始中斷。儘管我刪除了用於輸入,更改和keydown的事件處理程序,但在輸入期間$ pristine仍然設置爲false,因此將顯示消息。
我試着設置terminal: true
,priority: -1
作爲指令,但它仍然不起作用。我究竟做錯了什麼?
這裏是plunker:http://plnkr.co/edit/8FliNc?p=preview
在此先感謝