C1p*_*her 2 masking angularjs angularjs-directive angularjs-filter
我创建的指令使用函数setFormatting来屏蔽输入字段中的文本值.
scope.$watch(element, function() {
modelCtrl.$setViewValue(setFormatting(element.val(), attrs.symbol));
modelCtrl.$render();
});
element.bind('blur', function() {
modelCtrl.$setViewValue(setFormatting(element.val(), attrs.symbol));
modelCtrl.$render();
});
Run Code Online (Sandbox Code Playgroud)
范围.$ watch在第一次加载/应用内容时应用蒙版,element.bind为其他时间应用蒙版.范围.$ watch存储符号(如果有的话)作为ng-model变量的一部分.element.bind不是.我以为$ setViewValue()和$ render()没有更新ng-model变量.变量在哪里更新?
请参阅随附的小提琴:http
://jsfiddle.net/PJ3M4/
谢谢.
Max*_*tin 16
在这里我们使用$formatters.unshift
和$filter
:
JS
var fessmodule = angular.module('myModule', []);
fessmodule.controller('fessCntrl', function ($scope) {
$scope.test = 123456879;
});
fessmodule.$inject = ['$scope'];
fessmodule.directive('format', ['$filter', function ($filter) {
return {
require: '?ngModel',
link: function (scope, elem, attrs, ctrl) {
if (!ctrl) return;
var symbol = "°"; // dummy usage
ctrl.$formatters.unshift(function (a) {
return $filter(attrs.format)(ctrl.$modelValue) + symbol;
});
ctrl.$parsers.unshift(function (viewValue) {
var plainNumber = viewValue.replace(/[^\d|\-+|\.+]/g, '');
elem.val($filter('number')(plainNumber) + symbol);
return plainNumber;
});
}
};
}]);
Run Code Online (Sandbox Code Playgroud)
HTML
<input type="text" ng-model="test" format="number"/>
Run Code Online (Sandbox Code Playgroud)
演示 Fiddle
作为旁注
你也可以找到这个有用的:小提琴
归档时间: |
|
查看次数: |
24220 次 |
最近记录: |