为什么此范围变量不会触发更改?

时间:2014-02-06 16:45:48

标签: javascript angularjs

我有以下plunkr:here。任何人都可以解释为什么trimName指令不更改模板上的文本?我在控制台中看到文本“修剪”,但我没有看到它反映出来。我想我处于“有角度的世界”,因为如果我尝试使用范围,我会看到$apply already in progress

1 个答案:

答案 0 :(得分:1)

我们可以将这个问题视为“竞争条件”之类的问题 $digest已在进行中,您的值会被AngularJS覆盖。

简单的解决方法是稍后使用$evalAsync评估您的陈述:

if(scope.trimName.length > intLimit) {
  scope.$evalAsync(function () {
    scope.trimName = scope.trimName.substring(0, intLimit) + "...trimmed";
  });
}

Here is an example