检查小提琴:
http://jsfiddle.net/9sqtvcou/1/
在输入中键入内容,然后等待500毫秒。如果您将“外部资源”更改为版本1.2.27(从我发布此日期开始的最新版本v1.2)它可以工作,否则它不会。
这是潜在的相关代码:
var debounceDuration = $parse($attrs.debounce)($scope);
var immediate = !!$parse($attrs.immediate)($scope);
var debouncedValue, pass;
var prevRender = ngModelController.$render.bind(ngModelController);
var commitSoon = debounce(function (viewValue) {
pass = true;
ngModelController.$setViewValue(viewValue);
pass = false;
}, parseInt(debounceDuration, 10), immediate);
ngModelController.$render = function () {
prevRender();
commitSoon.cancel();
//we must be first parser for this to work properly,
//so we have priority 999 so that we unshift into parsers last
debouncedValue = this.$viewValue;
};
ngModelController.$parsers.unshift(function (value) {
if (pass) {
debouncedValue = value;
return value;
} else {
commitSoon(ngModelController.$viewValue);
return debouncedValue;
}
});
我对角度并不熟悉,所以我想知道:在v1.3中发生了什么破坏角度去抖?
编辑: 技术细节的答案优先于抽象答案。
答案 0 :(得分:2)
我认为这与breaking change in 1.3.0有关。请尝试将视图更改为:
,而不是自定义指令<input type="text" ng-model="chapter.title" ng-model-options="{ debounce: 500 }">
答案 1 :(得分:1)
https://github.com/shahata/angular-debounce/issues/12
作为棱角分裂的创造者和角色贡献者,沙哈塔说:
使用ng-model-options在角度1.3中原生支持去抖动。
这就是为什么角度去抖在角度v1.3处被打破的原因。