Comment để giải pháp Đánh dấu Rajcok: khi sử dụng $ setViewValue, bạn kích hoạt các phân tích cú pháp và xác nhận một lần nữa. Nếu bạn thêm câu lệnh console.log ở đầu hàm viết hoa, bạn sẽ thấy nó được in hai lần.
Tôi đề nghị các giải pháp chỉ thị sau (nơi ngModel là không bắt buộc):
.directive('capitalize', function() {
return {
restrict: 'A',
require: '?ngModel',
link: function(scope, element, attrs, ngModel) {
var capitalize = function (inputValue) {
return (inputValue || '').toUpperCase();
}
if(ngModel) {
ngModel.$formatters.push(capitalize);
ngModel._$setViewValue = ngModel.$setViewValue;
ngModel.$setViewValue = function(val){
ngModel._$setViewValue(capitalize(val));
ngModel.$render();
};
}else {
element.val(capitalize(element.val()));
element.on("keypress keyup", function(){
scope.$evalAsync(function(){
element.val(capitalize(element.val()));
});
});
}
}
};
});
Nguồn
2015-04-22 11:41:08
bạn có thể giải thích thêm một chút về cách thức hoạt động hoặc cung cấp liên kết tới tài liệu không? Ngoài ra, nếu bạn nhập một chữ cái thường ở đầu và hộp không trống thì con trỏ sẽ di chuyển đến cuối, nhưng nếu bạn nhập ký tự viết hoa thì không ... –
@JasonGoemaat, http://docs.angularjs.org/guide/forms # customvalidation Tôi không có bất kỳ ý tưởng nào về cách sửa chuyển động của con trỏ. –
@JasonGoemaat Chuyển động của con trỏ xảy ra vì nội dung đang được thay thế bằng văn bản đã thay đổi (chỉ thay đổi khi chữ cái đầu tiên được nhập là không phải vốn). Để khắc phục điều này, bạn có thể nắm bắt phạm vi lựa chọn và đặt lại phạm vi lựa chọn mới trong văn bản mới khi nó được đặt. Có một thư viện ngọt ngào gọi là Rangy (https://code.google.com/p/rangy/) sẽ giúp bạn với điều này nếu bạn đủ nghiêm túc về nó để sửa chữa nó. – James