Angular $解析器在视图更改和模型更改后调用

时间:2015-12-22 15:52:50

标签: javascript angularjs

看看这个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。你可以很容易地看到问题。

1 个答案:

答案 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