【问题标题】:Implementing search in AngularJS: default way在 AngularJS 中实现搜索:默认方式
【发布时间】:2016-11-15 16:04:11
【问题描述】:

我已经在我的 angularjs 应用中实现了默认搜索,代码如下:

<div>
<input type="text" ng-model="searchKeyword" placeholder="Search records...">
<div class="checkbox" ng-repeat="record in records | filter: searchKeyword">
<label class="ms-pl-xs">
  <input type="checkbox">{{record.value}}&nbsp;[{{record.count}}]
</label>
</div>

我在这里面临的问题是,假设有人碰巧触发了一些在 ng 重复的记录中不存在的关键字。我想要一条消息出现,说明“未找到任何东西”或其他任何内容。

如何实现该逻辑?我在这里浏览了不同的文章和几个问题,在这方面找不到任何东西。我如何查看搜索的术语的长度是否为零,以便我可以 ng-if 那个东西并显示消息?谢谢!

【问题讨论】:

  • 不,它不是重复的...... OP不想检查记录数组长度,但过滤后的数组长度......
  • @MarcoS 对,这是链接问题中投票第二高的答案。
  • @OliverSalzburg:你说得对,我确实停止接受已接受的答案...... :-( 但这个问题更具体,它明确询问 filter结果长度...您指向的问题没有,而且确实OP接受了不同的答案... :-)
  • 不是重复的,我在问这个之前检查了其他问题:)

标签: javascript angularjs filter angular-filters


【解决方案1】:

如果您使用的是 Angular 1.3+,您可以使用alias

<div>
  <input type="text" ng-model="searchKeyword" placeholder="Search records..." />
  <div class="checkbox" ng-repeat="record in records | filter: searchKeyword as found">
    <label class="ms-pl-xs">
      <input type="checkbox">{{record.value}}&nbsp;[{{record.count}}]
    </label>
  </div>
  <div ng-if="found === 0">
    Nothing found
  </div>
</div>

如果您必须使用较旧的 Angular,您可以将过滤器的结果分配给一个新数组,然后检查它的长度:

<div>
  <input type="text" ng-model="searchKeyword" placeholder="Search records..." />
  <div class="checkbox" ng-repeat="record in filteredRecords = (records | filter: searchKeyword)">
    <label class="ms-pl-xs">
      <input type="checkbox">{{record.value}}&nbsp;[{{record.count}}]
    </label>
  </div>
  <div ng-if="filteredRecords.length === 0">
    Nothing found
  </div>
</div>

【讨论】:

  • 第一个解决方案不让记录出现,第二个解决方案(确实让记录重复),但不满足要求。 :(
  • 我的大错!!! ng-if 应该在ng-repeat 之外out,否则,如果“没有找到”,它甚至不会被角度评估... :-((( 刚刚更正了代码,它工作,在这里,现在......
  • 拯救了我的一天!非常感谢!! :D
猜你喜欢
  • 2010-09-27
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 2014-01-11
  • 2010-10-15
  • 2014-05-13
相关资源
最近更新 更多