Tôi có chỉ thị xác thực được gọi là valid-number
được sử dụng để đặt hiệu lực của biểu mẫu bằng $ setValidity - điều này phù hợp với bất kỳ giá trị văn bản nào mà tôi nhập vào hộp nhập có chỉ thị được áp dụng cho như một thuộc tính.Xác thực biểu mẫu ban đầu bằng các chỉ thị
HTML là
<form name="numberForm">
<input name="amount" type="text" ng-model="amount" required valid-number /></form>
Chỉ thị là như sau
angular.module('test',[]).directive('validNumber',function(){
return{
require: "ngModel",
link: function(scope, elm, attrs, ctrl){
var regex=/\d/;
ctrl.$parsers.unshift(function(viewValue){
var floatValue = parseFloat(viewValue);
if(regex.test(viewValue)){
ctrl.$setValidity('validNumber',true);
}
else{
ctrl.$setValidity('validNumber',false);
}
return viewValue;
});
}
};
});
Tuy nhiên, tôi cũng muốn xác nhận để được kích hoạt và thiết lập css đến một clsss không hợp lệ nếu giá trị đầu vào hộp được khởi tạo khi trang được tải đầu tiên không hợp lệ, ví dụ: nếu tôi đặt $scope.amount = 'not a number'
Tôi mong đợi hộp nhập liệu đã có chỉ thị áp dụng cho nó, nhưng không có niềm vui. Để cho not a number
được đánh dấu là không hợp lệ, tôi phải thực hiện thay đổi đối với nội dung của đầu vào, điều này sẽ kích hoạt chỉ thị.
Làm cách nào để đảm bảo chỉ thị áp dụng cho bất kỳ nội dung nào mà <input>
được khởi tạo?
Ví dụ mã đầy đủ ở đây;
này làm việc tuyệt vời. – GrahamB
Bài đăng tuyệt vời và nó làm nổi bật các chi tiết quan trọng như $ parsers và $ formatters khó tìm trong tài liệu. – Tobias
Chỉ cần tham gia vào các trường hợp xác thực chéo phức tạp và bài đăng này đã lưu trong ngày - hoặc biến một ngày thành vài phút heh! – bchesley