Les filtres font problème avec Angular

J'ai un gros problème avec les filtres sur Angular, pour être explicite: recherche d'entrée avec un filtre attaché.

Si vous voyez cet exemple, c'est exactement ce que je veux

En fait, j'ai fait Plnkr avec les informations réelles de mon application. Vous pouvez rechercher dans les sports et ses ligues, mais dans mon application, vous ne pouvez pas faire de recherches dans les sports et, une fois que vous essayez de rechercher des ligues, l'application renvoie un message "ne correspond à aucun critère de recherche" ci-dessous. Met tout le code concernant ce problème, quelqu'un dit qu'il pourrait s'agir d'un problème de routage ou qu'il me manque une résolution ou quelque chose comme ça, c'est pourquoi je suis là, car j'ai besoin de votre aide. J'ai également enregistré une VIDEO pour que vous compreniez plus facilement, comme vous le voyez sur la vidéo si je place "collège", le filtre fonctionne, mais ci-dessous il y a 2 ligues commençant par "ncaa", si je tape "ncaa" alors le message vide montre Up. C'est bizarre car, dans l'exemple de Plnkr, tout fonctionne correctement.

SportsList.html

<input type="text" placeholder="Sports finder..." ng-model="query"> <div ng-repeat="sport in sportsFilter = (sports | filter:query)"> ng-if="sport.leagues.length"> <!--this filter works correctly--> {{sport.name}} <div ng-repeat="league in sport.leagues | filter:query"> <!--this filter do not any respond--> {{league.name}} </div> </div> 

App.js

 .config(function($stateProvider, $urlRouterProvider) { $stateProvider .state('app.sports', { url:'/sports', views:{ menuContent:{ templateUrl:'templates/sportsList.html', controller:'SportsController' } } }) 

Service.js

  .factory('SportsFactory', function($http, $q, AuthFactory, LocalForageFactory, LeaguesFactory, CONSTANT_VARS) { return { getSports: function(agent) { var defer = $q.defer(); LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS) .then(function(sports) { if (!_.isNull(sports)) { defer.resolve(_.values(sports)); }else { $http.get(CONSTANT_VARS.BACKEND_URL + '/lines/sports/' + agent) .success(function(sports) { //forcing array instead of object sports = _.values(sports); sports = _.sortBy(sports, function(sport) { return sport.priority; }); LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS, sports); defer.resolve(sports); }) .error(function(err) { defer.reject(err); }); } }); return defer.promise; }, getSportsWithLeagues: function(customer) { var _this = this, defer = $q.defer(), rejection = function(err) { defer.reject(err); }, sportsLength; LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS_LEAGUES) .then(function(sportLeagues) { if (!_.isNull(sportLeagues)) { //forcing array instead of object sportLeagues = _.values(sportLeagues); defer.resolve(sportLeagues); }else { _this.getSports(customer.agent).then(function(sports) { sportsLength = sports.length; LeaguesFactory.getLeagues({ sportIds: _.pluck(sports, 'id'), lineProfile: customer.lineProfile, betLimit: customer.betLimit }).then(function(leagues) { _.each(sports, function(sport) { sport.leagues = _.filter(leagues, function(league) { return sport.id === league.sport.id; }); }); //forcing array instead of object sports = _.values(sports); LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS_LEAGUES, sports); defer.resolve(sports); }, rejection); }, rejection); } }, rejection); return defer.promise; } }; }); 

Controller.js

 .controller('SportsController', function($scope, $state, AuthFactory, SportsFactory) { $scope.sports = []; $scope.customer = {}; AuthFactory.getCustomer().then(function(customer) { $scope.customer = customer; SportsFactory.getSportsWithLeagues(customer).then(function(sports) { $ionicLoading.hide(); if (sports.length) { $scope.sports = sports; }else { AuthFactory.logout(); } }, function(err) { $ionicLoading.hide(); console.log(err); }); }, function(err) { $ionicLoading.hide(); $state.go('app.login'); console.log(err); }); 

Quelles sont vos suggestions?

Peut-être que vous devriez résoudre le service dans l'itinéraire, voici un exemple:

 views:{ menuContent:{ templateUrl:'templates/sportsList.html', controller:'SportsController', resolve: { Sports: function(sportsService, $q) { var defer = $q.defer(); sportsService.getSports().then(function getAllSports(allSports) { defer.resolve(allArticles); }); return defer.promise; } } } } 

Ensuite, appelez simplement Sports résolu dans votre contrôleur

 .controller('SportsController', function($scope, Sports) { $scope.sports = Sports 

Quelque chose comme ça, ce n'est qu'un exemple, vous devriez également appeler l'AuthFactory dans la résolution.

Voici la documentation à résoudre:

Résoudre la documentation pour ui-router

J'espère que cela vous aidera!

Réponse automatique juste pour les problèmes futurs, la façon appropriée de le faire et d'éviter les anti-modèles:

 .state('app.sports', { url:'/sports', views:{ menuContent:{ templateUrl:'templates/sportsList.html', controller:'SportsController', resolve: { Customer: ['AuthFactory', function(AuthFactory) { return AuthFactory.getCustomer(); }], Sports: ['SportsFactory', 'Customer', function(SportsFactory, Customer) { return SportsFactory.getSportsWithLeagues(Customer); }], Leagues: ['Sports', 'LeaguesFactory', function(Sports, LeaguesFactory) { return LeaguesFactory.getLeagues(Sports); }] } } } })