Tôi gặp vấn đề khi sử dụng $ formatters.
Mục tiêu của tôi là ẩn số điện thoại, chỉ để lại 4 ký tự cuối cùng hiển thị. Không sao nếu bạn không viết bất cứ điều gì trong đầu vào. Nếu bạn viết một cái gì đó, mô hình được ảnh hưởng bởi mặt nạ và tôi đăng ký điện thoại ẩn trong DB ...
Dưới đây là chỉ thị tôi sử dụng:
.directive('tsHideField', function() {
return {
require: 'ngModel',
restrict: 'A',
link: function (scope, element, attributes, controller) {
var maskValue = function (value) {
if (!value) {
return "";
}
if (value.length <= 4) {
return value;
}
var valueHide = "";
if (value.indexOf('@') === -1) {
//leave last 4 chars
valueHide = value.toString().substring(0, value.length - 4).replace(/[\S]/g, "\u2022");
return valueHide + value.toString().substring(value.length - 4);
} else {
//Adresse email, on laisse après le @ et on cache tout sauf les 4 dernières lettre avant
//'[email protected]'.substring(0,'[email protected]'.indexOf('@') - 4).replace(/[\S]/g, "\u2022") + '[email protected]'.substring('[email protected]'.indexOf('@') - 4)
valueHide = value.toString().substring(0, value.indexOf('@') - 4).replace(/[\S]/g, "\u2022");
return valueHide + value.toString().substring(value.indexOf('@') - 4);
}
// replace all characters with the mask character
//return (value || "").replace(/[\S]/g, "\u2022");
}
/** SI ON VEUT EGALEMENT CACHER A L ECRIT:
*
* var createMaskedInputElement = function() {
if (! maskedInputElement || ! maskedInputElement.length) {
maskedInputElement = element.clone(true);
maskedInputElement.attr("type", "password"); // ensure the value is masked
maskedInputElement.removeAttr("name"); // ensure the password save prompt won't show
maskedInputElement.removeAttr("core.application.main.directive.mask"); // ensure an infinite loop of clones isn't created
maskedInputElement.bind("blur", function() {
element.removeClass("ng-hide");
maskedInputElement.remove();
maskedInputElement = null;
});
$compile(maskedInputElement)(scope);
element.after(maskedInputElement);
}
};
element.bind("focus", function() {
createMaskedInputElement();
element.addClass("ng-hide");
maskedInputElement[0].focus();
});
*/
controller.$formatters.push(function (value) {
return maskValue(value);
});
}
};
});
Và đối với cơ sở của bạn, đây là một fiddle với một chút triển khai: http://jsfiddle.net/nqp4qtLk/2/
Làm cách nào để ngăn mô hình bị ảnh hưởng bởi mặt nạ ??
EDIT: Tôi thích ứng với câu trả lời của Gr3g để phù hợp với yêu cầu của tôi
xem fiddle Cập nhật: Updated fiddle
Cảm ơn sự giúp đỡ của bạn nhưng nếu tôi nối thêm "56" vào giá trị đầu vào, nó không ' t ảnh hưởng đến mô hình. Nó có vẻ như được cố định với giá trị ban đầu – Jerome2606
Mục đích: chỉ 4 ký tự cuối cùng có thể được thay đổi, vô hiệu hóa * sẽ bị xóa? – gr3g
Vui lòng xem Fiddle đã chỉnh sửa của tôi. Hy vọng điều này đòi hỏi các nhu cầu – gr3g