刷新页面后过滤器不起作用
Filter not working after refreshing the page
我有这个输入搜索
<input type="search" ng-model="query">
<div ng-repeat="sport in sports | filter:query"></div>
在用户登录后效果很好,但在同一会话中,如果用户刷新页面,过滤器将不再起作用,如果您在搜索框中键入内容,则没有任何反应,数组不起作用'改变。
这是服务
angular.module('myApp.services')
.factory('SportsFactory', function($http, $q,
AuthFactory, LeaguesFactory, LocalForageFactory, CONSTANT_VARS) {
return {
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)) {
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;
});
});
LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS_LEAGUES, sports);
defer.resolve(sports);
}, rejection);
}, rejection);
}
}, rejection);
return defer.promise;
}
}
}
这里是控制器的一部分
angular.module('myApp.controllers', [])
.controller('LinesCtrl', function($scope, customer,
SportsFactory, LinesFactory) {
$scope.query = '';
SportsFactory.getSportsWithLeagues(customer).then(function(sports) {
$scope.sports = sports;
});
}
我也有这个$watch
$scope.$watch('query', function(val) {
console.log(val);
});
检查过滤器是否在刷新后停止工作,但仍然正常工作,每次在查找器中键入内容时,您都可以在控制台中看到日志。
那么,您认为这里发生了什么?
问题是每次刷新页面时,承诺 sportLeagues
是 returning 一个对象,只有一个对象,里面有一些其他对象,因为您正在使用 lodash
,只需输入 defer.resolve(_.values(sportLeagues));
就足以 return 您需要的值。如果您需要了解其他信息,请告诉我
我有这个输入搜索
<input type="search" ng-model="query">
<div ng-repeat="sport in sports | filter:query"></div>
在用户登录后效果很好,但在同一会话中,如果用户刷新页面,过滤器将不再起作用,如果您在搜索框中键入内容,则没有任何反应,数组不起作用'改变。
这是服务
angular.module('myApp.services')
.factory('SportsFactory', function($http, $q,
AuthFactory, LeaguesFactory, LocalForageFactory, CONSTANT_VARS) {
return {
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)) {
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;
});
});
LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS_LEAGUES, sports);
defer.resolve(sports);
}, rejection);
}, rejection);
}
}, rejection);
return defer.promise;
}
}
}
这里是控制器的一部分
angular.module('myApp.controllers', [])
.controller('LinesCtrl', function($scope, customer,
SportsFactory, LinesFactory) {
$scope.query = '';
SportsFactory.getSportsWithLeagues(customer).then(function(sports) {
$scope.sports = sports;
});
}
我也有这个$watch
$scope.$watch('query', function(val) {
console.log(val);
});
检查过滤器是否在刷新后停止工作,但仍然正常工作,每次在查找器中键入内容时,您都可以在控制台中看到日志。
那么,您认为这里发生了什么?
问题是每次刷新页面时,承诺 sportLeagues
是 returning 一个对象,只有一个对象,里面有一些其他对象,因为您正在使用 lodash
,只需输入 defer.resolve(_.values(sportLeagues));
就足以 return 您需要的值。如果您需要了解其他信息,请告诉我