看看这个jsbin。
我在这里用 b 替换 a ,这是我在项目中真正想要做的简化版本。
输入内容并查看控制台。为什么doTheJob(argument)
不止一次调用? (它是根据输入的长度调用的)
FYI ,这是我在项目中真正想做的事情:
我想将视图中的波斯数字(1 2 3 4 5 6 7 8 9 0)替换为拉丁文数字(1 2 3 4 5 6 7 8 9 0)。 这是它的jsbin。你可以很容易地看到问题。
答案 0 :(得分:1)
您当前的代码推送 - 换句话说,添加 - 每次按下一个键时对doTheJob
功能的另一个引用。但重点是,您不必检查keypress
- 这是Angular在跟踪模型时已经为您做的事情。
相反,您可以直接在链接功能中更改$parsers
:
link: function (scope, element, attrs, ngModel) {
ngModel.$parsers.push(function(inputValue) {
return doTheJob(inputValue);
});
你不应该忘记的是改变你的replacer
:
return inputValue.replace(/a/g, 'b');
...以便它在全球范围内进行替换(而不仅仅是一次)。这是demo。