当前位置: 首页 > 知识库问答 >
问题:

Angular JS filter-如果新值为空,则不更新DOM值

田昊天
2023-03-14

我正在做一个数据密集的角度项目,在这个项目中,我有一个ng重复,其中许多值每秒更新一次。如果一个值为空,它现在会更新DOM以显示一个空值;这是正确的行为。

需要的解决方案

我想要的是一个过滤器或表达式,当新值为空或NULL时,它不会更新DOM中的值。我相信他们称之为“锁定数据”。

可能的解决方案

我用$watch找到了几个可能的解决方案,但我相信它们不适合ng重复,或者至少效率不高:angularjs$watch旧值和新值是相同的

我想要实现的目标示例:(这不起作用)

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>

提前感谢您的帮助

共有2个答案

郝原
2023-03-14

好吧,我想说$watch选项足够好,可以使用它,但如果您不喜欢它,您可以尝试根据控制器/指令中的业务规则将旧集合值和新集合值组合起来,然后将其传递给视图。

干浩阔
2023-03-14

我将为此创建一个指令:

CoDepen:http://codepen.io/anon/pen/EVXgjz

angular.module('app').directive('latched', [function() {
  return {
    template: '<span>{{saved}}</span>',
    link: function($scope) {
      $scope.$watch('value', function(val) {
        if (!$scope.saved) {
          $scope.saved = val || 'Not defined yet';
        }
        if (val) {
          $scope.saved = val;
        } 
      })
    },
    scope: {
      value: '='
    }
  }
}])
 类似资料:
  • 只有当新值不为null时,我才会更新集合设置值。我有这样一个代码: 有没有一个简单的方法可以做到这一点? 另一种方法:如果我可以从我获取数据的表单的占位符中获取值,我可以解决这个问题...但是这可能吗?

  • 问题内容: 是否可以在sql中执行更新语句,但仅在更新不同时才执行更新? 例如 如果在数据库中, 不应 执行任何类型的更新 但是,如果 这 应该 执行更新。 问题答案: 使用更新前触发器可以做到这一点。在此触发器中,您可以将旧值与新值进行比较,并在新值不变的情况下取消更新。但这将导致呼叫者网站上的错误。 我不知道为什么要这样做,但是这里有几种可能性: 性能:这里没有性能提升,因为更新不仅需要找到正

  • 问题内容: 我有一个钥匙型课。让我们称为map的实例。 我要添加{ ,}(是的一个实例,并且一)该地图。但是,如果键已经存在,我想求和该映射图中的当前值。 目前我使用 但是在Java 8中是否有一种时髦的方式来做到这一点,例如使用和? 遗憾的是我无法弄清楚。 谢谢。 问题答案: 这就是地图上的合并功能的作用。 这可以进一步减少到 它基本上等于

  • 问题内容: 我有以下查询,仅在它们为空时才在其中更新值。 是否可以将所有这些都放入单个查询中? 和 问题答案: 您可以尝试: 尽管它可能会触发更新触发器,即使对于实际上未更改的行也是如此。

  • 问题内容: 我在存储过程中有一条更新语句,该语句通常如下所示: 是否只有当变量不为null或值-1时才触发更新语句的好方法? 类似于一个问题。 太感谢了。 问题答案: 使用T-SQL : 看一下MSDN文档。

  • 如果值为空,则需要在单元格中显示一个不间断的空格。这是我的模板: 我试过这个,但不管用: 它返回值的问题是: 如果许可证号带有值,则单元格为空,行颜色如下所示。 利用卢库马的建议,它表明了这一点: 更改筛选器中的if语句后,仍然不显示非值: