我创建的指令使用函数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();
});$watch第一次加载/应用内容时应用掩码,element.bind在其他时间应用掩码。范围.$watch是将符号(如果有)存储为ng模型变量的一部分。element.bind不是。我认为$setViewValue()和$render()没有更新ng模型变量。变量在哪里更新?
见附件小提琴:http://jsfiddle.net/PJ3M4/
谢谢。
发布于 2013-11-09 16:43:19
我能够通过向我的作用域添加一个modelCtrl.$parsers.push() {. }来以我想要的方式存储值。$watch(){.}。
scope.$watch(element, function() {
modelCtrl.$parsers.push(function(inputValue) {
showAlert("Watch", 1);
if (!prev) {
prev = false;
var returnVal = checkVal(inputValue, modelCtrl, decimals, true, minVal, maxVal);
if (String(returnVal) === ".") {
setAndRender(modelCtrl, "");
return "";
}
else {
return returnVal;
}
}
return String(inputValue).replace(/[^0-9 . -]/g, '');
});
prev = true;
setAndRender(modelCtrl, setFormatting(element.val(), decimals, attrs.prefix, attrs.symbol));
});发布于 2013-11-08 14:40:56
$watch在“摘要”循环中执行。element.bind回调是从外部角调用的,因此必须添加对scope.$apply()的显式调用。
element.bind('blur', function() {
modelCtrl.$setViewValue(setFormatting(element.val(), attrs.symbol));
modelCtrl.$render();
scope.$apply();
});更新小提琴
有关AngularJS事件循环的信息,请参阅文档。
发布于 2016-01-21 13:53:28
您也可以简单地使用
ui-mask="{{'999,999,999°'}}"https://stackoverflow.com/questions/19861408
复制相似问题