Angular JS过滤器不等于。

86

看起来是一个非常基本的问题,但我无法正确使用语法..

<li class="list-group-item" ng-repeat="question in newSection.Questions | filter:Id != '-1'; " ng-mouseenter="hover = true" ng-mouseleave="hover = false">
    <div href="#" editable-text="question.Text">{{question.Text}}</div>
</li>
我想展示所有id不为-1的问题,但是我做错了。谢谢!

你需要编写一个自定义过滤器,检查问题的id是否不等于-1。另外,我认为你的错误在于id是问题的属性。 - SoluableNonagon
@EliteOctagon 你可以做到 - 请看下面的答案。 - Michael Rose
你看过文档了吗?https://docs.angularjs.org/api/ng/filter/filter 在解释expression的部分(第二段落中的Usage -> argumentsfilter: {Id: "!-1"}或类似的东西应该可以解决问题。 - Nebulosar
2个回答

173

语法有点问题,尝试使用:

<li class="list-group-item"
    ng-repeat="question in newSection.Questions | filter:{ Id: '!-1'}"
    ng-mouseenter="hover = true" ng-mouseleave="hover = false">

    <div href="#" editable-text="question.Text">{{question.Text}}</div>
</li>

看一下这个小的JSFiddle:http://jsfiddle.net/U3pVM/3845/

编辑:

带变量的示例:

<script> var invalidId = '-1'; </script>
<li class="list-group-item"
    ng-repeat="question in newSection.Questions | filter:{ Id: '!' + invalidId}"
    ng-mouseenter="hover = true" ng-mouseleave="hover = false">

    <div href="#" editable-text="question.Text">{{question.Text}}</div>
</li>

这个方法也适用于变量吗?你的jsfiddle稍作修改,把“不等于”的值放在一个变量里而不是常量,但它将不再起作用。 - Domi
为了让变量正常工作,我不得不在Javascript中声明一个额外的字符串变量,并在前面加上“!”。例如:var notValid = -1; var filterString = '!' + notValid; 然后在HTML中使用filter: { Id: filterString}。 - Tielman Nieuwoudt
1
@Tielman,不需要声明额外的变量。这个很好用:“filter: {id: '!' + notValid}”。 - Stalinko
11
这也会过滤掉任何包含“-1”子字符串的 Id,例如“-11”或“2-1”。为了可靠地检查 Id 是否不是“-1”,您应编写一个小比较器函数,并将其用作过滤器。 - andypea
@MichaelRose,请查看这个示例 http://jsfiddle.net/U3pVM/33383/,为什么最后一个不显示在列表中,即使最后一个的ID是-12而不是-1? - chirag satapara
显示剩余3条评论

21
虽然@Michael Rose的答案适用于这种情况,但我认为如果您尝试过滤不等于某个对象/变量,它将无法正常工作。
在那种情况下,您可以使用:
JS:
filterId = -1

HTML:

<li ng-repeat="question in newSection.Questions | filter: !{ Id: filterId}">
</li>

一个更加嵌套的情况:

JS

someQuestion = {
   someObject: {
     Id: 1
   }
}
newSection.Questions = [someQuestion]

HTML

<li ng-repeat="question in newSection.Questions | filter: !{someObject : {Id: -1} }">
</li>

1
这个语法对我不起作用:!{ Id: -1},但是替代方案很好:{ Id:'!-1'}。也许这是版本差异造成的? - pythonjsgeo
可能是。你使用的是哪个版本? - Fernando Carvalhosa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接