gpt4 book ai didi

javascript - Angular 的过滤问题

转载 作者:行者123 更新时间:2023-11-29 14:49:19 24 4
gpt4 key购买 nike

我对 Angular 上的过滤器有一个很大的小问题,明确地说:带有过滤器的输入搜索。

if you see this example, is exactly what I want

实际上我是用我的应用程序的真实信息做那个 Plnkr 的。您可以搜索体育赛事和他的联赛,但在我的应用程序中您不能,您只能搜索体育赛事,一旦您尝试搜索任何联赛,该应用程序会返回一条消息“不符合任何搜索条件”,下面我将把所有关于这个问题的代码,有人说这可能是一个路由问题,或者我缺少一个解决方案或类似的东西,这就是我在这里的原因,因为我需要你的帮助。我还记录了一个 VIDEO为了让您更容易理解,正如您在视频中看到的那样,如果我输入“大学”,过滤器会起作用,但下面有 2 个以“ncaa”开头的联赛,如果我输入“ncaa”,则会显示空消息。这很奇怪,因为在 Plnkr 示例中一切正常。

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);
});

你有什么建议?

最佳答案

也许你应该在路由中解析服务,这里是一个例子:

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

然后在你的 Controller 中调用 Sports resolved

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

诸如此类,这只是一个示例,您也应该在解析中调用 AuthFactory。

这里是解决文档:

resolve documentation for ui-router

希望这对您有所帮助,干杯!

关于javascript - Angular 的过滤问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com