El filtro JS angular no es igual

83

Parece una pregunta muy básica, pero no puedo obtener la sintaxis correcta.

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

Todo lo que quiero es mostrar todas las preguntas donde id NO es -1. Qué estoy haciendo mal. ¡Gracias!

americanslon
fuente
necesita escribir un filtro personalizado que compruebe el question.id! = -1. También creo que su error es que la identificación es un atributo de la pregunta
SoluableNonagon
@EliteOctagon Puede hacerlo, vea mi respuesta a continuación.
Michael Rose
¿Miras la documentación? docs.angularjs.org/api/ng/filter/filter En la parte donde expressionse explica (segunda p en Uso -> argumentos ) filter: {Id: "!-1"}o algo así debería hacer el truco
Nebulosar

Respuestas:

165

La sintaxis está un poco fuera de lugar, intente:

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

Vea un pequeño JSFiddle: http://jsfiddle.net/U3pVM/3845/

Editar:

Ejemplo con variables:

<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>
Michael Rose
fuente
¿Puede esto funcionar de alguna manera también para las variables? Esta ligera modificación de su violín coloca la cantidad "no igual" en una variable, en lugar de una constante, y ya no funcionará.
Domi
Bueno, probablemente necesite escribir su propia función de filtro, llamémosla checkForXy luego usémosla como ... | filter:checkForXy devolveremos verdadero o falso si hay una coincidencia ...
Michael Rose
@Domi, he publicado una respuesta más general que responde a tu pregunta. Compruébalo cuando tengas tiempo
Fernando Carvalhosa
1
@Tielman, no es necesario declarar variables adicionales. Esto funciona bien: "filter: {id: '!' + notValid} "
Stalinko
11
Esto también filtrará cualquiera Idque contenga -1una subcadena, como -11o 2-1. Para verificar de manera confiable que Idno lo -1es, debe escribir una pequeña función de comparación y usarla como filtro.
andypea
20

Aunque la respuesta de @Michael Rose funciona para este caso, no creo que lo haga si intenta filtrar no es igual a algún objeto / variable

En ese caso, podría usar:

JS :

filterId = -1

HTML:

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

Un caso aún más anidado:

JS :

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

HTML

<li ng-repeat="question in newSection.Questions | filter: !{someObject : {Id: -1} }">
</li>
Fernando Carvalhosa
fuente
1
Esta sintaxis no me funciona:! {Id: -1} pero la respuesta alternativa funciona muy bien: {Id: '! - 1'}. ¿Quizás es / fue una diferencia de versión?
python1981
Podría ser. Qué versión estás usando?
Fernando Carvalhosa