【发布时间】:2015-10-08 12:15:15
【问题描述】:
我正在处理一个数据繁重的 Angular 项目,其中我有一个 ng-repeat,其中许多值每秒都会更新。如果一个值为空,它现在会更新 DOM 以显示一个空值;这是正确的行为。
需要的解决方案
我想要的是一个过滤器或表达式,当新值为空或 NULL 时,它不会更新 DOM 中的值。锁存数据,我相信他们称之为。
可能的解决方案
我用 $watch 找到了几个可能的解决方案,但我认为它们不适合 ng-repeat,或者至少效率不高: angularjs $watch old value and new value are the same
我想要实现的示例:(这不起作用)
app.filter('latchIt', function () {
return function (valueOld, valueNew) {
if (valueNew == '') {
// Do not update the DOM for this value, perhaps a return of the old value
return valueOld;
} else {
return valueNew;
}
};
});
HTML
<div class="item" ng-repeat="item in items track by item.id">
<div class="value" ng-repeat="value in item.data">{{ value | latchIt }}</div>
</div>
提前感谢您能给我的任何帮助和建议。
【问题讨论】:
-
虽然有可能,但我认为过滤器不太适合这项任务。相反,请查看 ng-model 或创建自己的指令,该指令可以跟踪两个值(旧的和当前的)。
-
值如何更新?您是否向服务器发送 ajax 调用?
-
item.data的值应该被处理以在它遇到重复结构之前比较旧值和新值。创建一个控制器或更新您的 ajax 调用来做到这一点。 -
我不确定过滤器是否会改变是否更新的行为
-
我开始明白指令是要走的路。我认为指令和 ng-repeat 会相互冲突,但这可能是我的错误假设。这些值是通过 websocket 更新的,所以我有异步调用。
标签: javascript angularjs dom filter ng-repeat