我有一个功能齐全的指令,你可以模仿它。
随意修改它以供您自己使用,但它基本上可以完成您想要的并且具有其他一些不错的功能。
指示:
angular.module('maskModule').directive('maskTextbox', function ($filter) {
return {
restrict: 'E',
templateUrl:'templates/mask-textbox.html',
scope: {
maskDisplayModel: '=?',
maskModel: '=?',
maskType: '@',
maskCurrency: '@',
placeHolder: '@'
},
link: function (scope, element, attr, ctrl) {
scope.maskDisplayModel = "";
if (!scope.maskCurrency)
scope.maskCurrency = "$";
var t;
scope.timer = 1;
if (!scope.placeHolder && scope.maskType == "phone") {
scope.placeHolder = "Phone..."
}
if (!scope.placeHolder && scope.maskType == "currency") {
scope.placeHolder = "Amount..."
}
if (!scope.placeHolder && (scope.maskType == "number" || scope.maskType == "decimal" || scope.maskType == "alpha")) {
scope.placeHolder = "Type here..."
}
scope.countdown = function () {
if (scope.timer == 0) {
scope.changeAction()
} else {
scope.timer -= 1;
t = setTimeout(function () {
scope.countdown();
}, 750);
}
};
scope.resetTimer = function () {
scope.timer = 1;
clearTimeout(t);
scope.countdown();
};
scope.changeAction = function () {
if (scope.maskType == "number") {
scope.maskModel = scope.maskDisplayModel.replace(/[^0-9]/g, '');
scope.maskDisplayModel = scope.maskDisplayModel.replace(/[^0-9]/g, '');
}
if (scope.maskType == "decimal") {
scope.maskModel = scope.maskDisplayModel.replace(/[^0-9.]/g, '');
scope.maskDisplayModel = scope.maskDisplayModel.replace(/[^0-9.]/g, '');
}
if (scope.maskType == "phone") {
scope.maskModel = scope.maskDisplayModel.replace(/[^0-9-()]/g, '');
scope.maskDisplayModel = scope.maskDisplayModel.replace(/[^0-9]/g, '');
scope.maskDisplayModel = $filter("tel")(scope.maskDisplayModel)
}
if (scope.maskType == "alpha") {
scope.maskModel = scope.maskDisplayModel.replace(/[^A-maska-mask]/g, '');
scope.maskDisplayModel = scope.maskDisplayModel.replace(/[^A-maska-mask]/g, '');
}
if (scope.maskType == "currency") {
scope.maskModel = scope.maskDisplayModel.replace(/[^0-9.]/g, '');
scope.maskDisplayModel = scope.maskDisplayModel.replace(/[^0-9.]/g, '');
scope.maskDisplayModel = $filter("currency")(scope.maskDisplayModel, scope.maskCurrency)
}
};
scope.initiate = function () {
if (scope.maskType == "number") {
scope.maskModel = scope.maskModel.replace(/[^0-9]/g, '');
scope.maskDisplayModel = scope.maskModel.replace(/[^0-9]/g, '');
}
if (scope.maskType == "decimal") {
scope.maskModel = scope.maskModel.replace(/[^0-9.]/g, '');
scope.maskDisplayModel = scope.maskModel.replace(/[^0-9.]/g, '');
}
if (scope.maskType == "phone") {
scope.maskModel = scope.maskModel.replace(/[^0-9-()]/g, '');
scope.maskDisplayModel = $filter("tel")(scope.maskModel);
}
if (scope.maskType == "alpha") {
scope.maskModel = scope.maskModel.replace(/[^A-Za-z]/g, '');
scope.maskDisplayModel = scope.maskModel.replace(/[^A-Za-z]/g, '');
}
if (scope.maskType == "currency") {
scope.maskModel = scope.maskModel.replace(/[^0-9.]/g, '');
scope.maskDisplayModel = $filter("currency")(scope.maskModel, scope.maskCurrency, 2);
}
};
scope.initiate();
}
}
});
模板:
<input type="text" ng-model="maskDisplayModel" ng-blur="changeAction()" placeholder="{{placeHolder}}"/>
HTML 引用指令:
<mask-textbox mask-model="myText" mask-type="phone"></mask-textbox>