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!


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>

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.