【问题标题】:Why is angular-debounce broken in v1.3.0?为什么 angular-debounce 在 v1.3.0 中被破坏?
【发布时间】:2014-12-03 16:28:39
【问题描述】:

检查小提琴:

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;
  }
});

我不熟悉 angular,所以我想知道:在 v1.3 中发生了什么破坏了 angular-debounce?

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

【问题讨论】:

    标签: javascript angularjs angular-directive


    【解决方案1】:

    我认为这与breaking change in 1.3.0 有关。而不是自定义指令,尝试将您的视图更改为:

    <input type="text" ng-model="chapter.title" ng-model-options="{ debounce: 500 }">
    

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

    【讨论】:

    • 是否可以这样做:ng-model-options="{ debounce: vm.delay }"
    【解决方案2】:

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

    作为 angular-debounce 创建者和 angular 贡献者,shahata 说:

    使用 ng-model-options 在 Angular 1.3 中原生支持 debounce。

    这就是 angular-debounce 在 angular v1.3 中被破坏的原因。

    【讨论】:

      猜你喜欢
      • 2020-01-08
      • 2023-03-04
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 2022-11-18
      • 2015-01-29
      相关资源
      最近更新 更多