gpt4 book ai didi

javascript - 指令 $formatters 在编写时影响 ngModel

转载 作者:搜寻专家 更新时间:2023-11-01 04:30:19 24 4
gpt4 key购买 nike

我在使用 $formatters 时遇到问题。

我的目标是隐藏电话号码,只保留最后 4 个字符可见。如果你不在输入中写任何东西就可以了。如果你写东西,模型会受到掩码的影响,我在数据库中注册了隐藏的电话......

这是我使用的指令:

.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
//'lambertjer@gmail.com'.substring(0,'lambertjer@gmail.com'.indexOf('@') - 4).replace(/[\S]/g, "\u2022") + 'lambertjer@gmail.com'.substring('lambertjer@gmail.com'.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);
});

}
};
});

对于您的设施,这里有一个带有一些实现的 fiddle : http://jsfiddle.net/nqp4qtLk/2/

如何防止模型受到面具的影响??

编辑:我调整 Gr3g 的答案以符合我的要求

查看更新后的 fiddle :Updated fiddle

最佳答案

请看我的EDITED fiddle :

如果您不允许删除 *:
Fiddle

如果您允许删除 *:
Punker

注意:
如果您允许删除 *,您将在 plunker 中看到我不允许以下内容:
- 当数字可见时删除星号。
- 在 2 星之间或第一个位置添加一个数字。

代码已经长大了,所以我只能在这里给你展示部分代码。
显然,您需要 $parsers 管道:

controller.$parsers.push(function(val){
//Modify your value
return modifiedValue || val;
});

请注意,我在每个管道中添加了 2 个函数,因此我可以在需要修改值的函数中访问 String。我不必(太)关心强制转换。

controller.$parsers.unshift(function(val){
return String(val);
});

您或许可以让它变得更快,但在重构时要小心考虑所有可能的处理方式。特别是当 * 可以删除时。

关于javascript - 指令 $formatters 在编写时影响 ngModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35163785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com