Schreiben Ich habe ein Problem $ Formatierer zu verwenden.
Mein Ziel ist die Telefonnummer zu verstecken, lassen Sie einfach die letzten 4 Zeichen sichtbar. Es ist in Ordnung, wenn Sie nichts in die Eingabe schreiben. Wenn Sie etwas schreiben, das Modell von dem Maske betroffen ist und ich das versteckte Telefon in DB registrieren ...
Hier ist die Direktive ich benutze:
.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);
});
}
};
});
Und für Ihre Anlage, hier ist eine Geige mit ein wenig Umsetzung: http://jsfiddle.net/nqp4qtLk/2/
Wie zu verhindern, dass Modell durch die Maske beeinflusst werden ??
EDIT: Ich passe die Antwort von Gr3g auf meine Anforderungen
siehe die aktualisierte Geige zum Spiel: Updated fiddle
Danke für Ihre Hilfe, aber wenn ich "56" in den Eingabewert anfügen, tut es nicht t das Modell beeinflussen. Es scheint auf den Anfangswert – Jerome2606
fixiert zu sein. Ist der Zweck: dass nur die 4 letzten Zeichen geändert werden können, wodurch das * gelöscht wird? – gr3g
Bitte beachten Sie meine bearbeitete Geige. Hoffe, dieser benötigt die Bedürfnisse – gr3g