examples ejemplos descargar angularjs

ejemplos - Angularjs filtro negado



angularjs pdf (5)

''!'' Carácter anterior a la cadena de filtro, como a continuación:

filtro: ''!'' + idiomaOrigin

<select ng-model="languageOrigin" ng-change="updatePrice()"> <option ng-repeat="language in languages">{{language}}</option> </select> <select ng-model="languageDestination" ng-change="updatePrice()"> <option ng-repeat="language in languages | filter:''!''+languageOrigin">{{language}}</option> </select>

Tengo un conjunto de elementos que quiero filtrar en ng-repeat utilizando un modelo ng como la cadena para filtrar el conjunto, hasta ahora no he encontrado una manera de hacer que funcione cuando se niega la expresión. haciendo algo como esto:

<select ng-model="languageOrigin" ng-change="updatePrice()"> <option ng-repeat="language in languages">{{language}}</option> </select> <select ng-model="languageDestination" ng-change="updatePrice()"> <option ng-repeat="language in languages | filter:!languageOrigin">{{language}}</option> </select>

En la documentación , dice que debemos usar! Para negar la expresión pero todavía no hay suerte.

¿Qué estoy haciendo mal?


Estoy usando 1.3.15 y ENDOH''s solución ENDOH''s no funcionó. En su lugar, filter:''!'':languageOrigin funcionó para mí.


Si está utilizando un método para filtrar que prefijar el nombre del método con ''!'' no trabajará. En su lugar puedes hacer algo como:

// You can register this in your AppCtrl if you like, otherwise just use $scope. $rootScope.not = function(func) { return function (item) { return !func(item); } };

Entonces tu haces

filter:not(myFilterMethod)

En tu html se vería como:

<select ng-model="languageDestination" ng-change="updatePrice()"> <option ng-repeat="language in languages | filter:not(languageOrigin)">{{language}}</option> </select>

Referencia: https://.com/a/17811582/175830


Si usa objetos, también podría interesarle lo siguiente:

<li data-ng-repeat="obj in objs | filter:({obj_attr: ''!obj_val''})"> ... </li>

Probado en AngularJS 1.1.5.


ACTUALIZACIÓN : ver la respuesta de takanao de ENDOH.

Mirando el código fuente de AngularJS, parece que ''!'' niega el resultado del predicado, no el predicado en sí mismo :

var search = function(obj, text){ if (text.charAt(0) === ''!'') { return !search(obj, text.substr(1)); } switch (typeof obj) { ...

Por lo tanto, una forma de solucionar esto es [Si no te gusta la sintaxis ''!'' + MyFilter,] puedes definir tu propia función de predicado en tu controlador:

$scope.inverseOriginFilter = function(item) { return item.search($scope.languageOrigin) == -1 }

Entonces utilízalo en tu HTML:

<select ng-model="languageDestination" ng-change="updatePrice()" ng-options="language for language in languages | filter:inverseOriginFilter"> </select>

Ejemplo de fiddle .