角JS过滤器不等于


83

似乎是一个非常基本的问题,但我无法正确使用语法。

<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 2014年

@EliteOctagon您可以做到-请在下面查看我的答案。
Michael Rose

您看了文件吗?docs.angularjs.org/api/ng/filter/filter在部分地方expression进行说明(在第二p用法- >参数filter: {Id: "!-1"}或成才类似于768,16做特技
Nebulosar

Answers:


165

语法稍有不足,请尝试:

<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>

这可以以某种方式也适用于变量吗?对小提琴的这种轻微修改将“不相等”的数量放置在变量而不是常量中,并且不再起作用。
米(Domi)2014年

好吧,您可能需要编写自己的过滤器函数,让我们对其进行调用checkForX,然后使用它... | filter:checkForX,如果有匹配项,则返回true或false ...
Michael Rose

@Domi,我发布了一个更笼统的答案,可以回答您的问题。如果有时间,可以查看一下
Fernando Carvalhosa 2015年

1
@Tielman,无需声明其他变量。效果很好:“过滤器:{id:'!' + notValid}”
Stalinko

11
这还将过滤掉任何Id包含-1为子字符串的内容,例如-112-1。为了可靠地检查Id是不是-1你应该写一个小比较器功能和使用,作为过滤器。
andypea

20

尽管@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'}。也许是版本差异?
python1981

可能。您使用什么版本?
Fernando Carvalhosa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.