【发布时间】:2017-05-06 14:27:25
【问题描述】:
我正在尝试创建一个名为currency 的指令,该指令在输入文本之前附加一个$。美元符号应始终显示且不可移除。
这是我的代码:
app.directive('currency', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elem, attrs, controller) {
// view -> model
controller.$parsers.push(function (viewValue) {
viewValue = viewValue.replace(/^\$/, '');
controller.$viewValue = viewValue;
return viewValue;
});
// model -> view
controller.$formatters.push(function (modelValue) {
modelValue = '$' + modelValue;
controller.$modelValue = modelValue;
return modelValue;
});
}
};
});
工作示例:https://jsfiddle.net/U3pVM/29012/
如您所见,美元符号最初是附加的,但可以删除,之后不会附加。我推送到$formatters 的函数似乎只被调用一次。它应该像那样工作还是我错过了什么?如何实现所需的行为?
【问题讨论】:
-
如果您在输入字段中输入,您将触发 $parsers 而不是 $formatters。您可以通过添加操作相同 ngModel 的第二个输入字段来测试这一点。例如jsfiddle.net/U3pVM/29013
-
在视图中更改模型时不会调用格式化程序
标签: javascript angularjs ecmascript-5