为什么v1.3.0中的角度去抖是破坏的?

时间:2014-12-03 16:28:40

标签: javascript angularjs angular-directive

检查小提琴:

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中发生了什么破坏角度去抖?

编辑: 技术细节的答案优先于抽象答案。

2 个答案:

答案 0 :(得分:2)

我认为这与breaking change in 1.3.0有关。请尝试将视图更改为:

,而不是自定义指令
<input type="text" ng-model="chapter.title" ng-model-options="{ debounce: 500 }">

http://jsfiddle.net/mblase75/w89ow20f/

答案 1 :(得分:1)

https://github.com/shahata/angular-debounce/issues/12

作为棱角分裂的创造者和角色贡献者,沙哈塔说:

  

使用ng-model-options在角度1.3中原生支持去抖动。

这就是为什么角度去抖在角度v1.3处被打破的原因。