javascript - 刷新页面后过滤器不起作用

标签 javascript angularjs angular-filters

我有这个输入搜索

<input type="search" ng-model="query">

<div ng-repeat="sport in sports | filter:query"></div>

在用户登录后工作得非常好,但是在同一个 session 中,如果用户刷新页面,过滤器将不再工作,如果您在搜索框中键入某些内容,则不会发生任何事情,数组也不会发生改变。

这是服务

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

这里是 Controller 的一部分

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

检查过滤器在刷新后是否停止工作,但仍然正常工作,并且每次在查找器中键入内容时都可以在控制台中看到日志。

那么,您认为这里发生了什么?

最佳答案

问题是,每次刷新页面时,都会 promise sportLeagues正在返回一个对象,只是一个内部有其他一些对象的对象,就像您使用 lodash 一样,只需输入 defer.resolve(_.values(sportLeagues));这足以返回您需要的值。如果您需要了解其他信息,请告诉我

关于javascript - 刷新页面后过滤器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28838707/

相关文章:

angularjs - BrowserSync 不适用于 Angular View

javascript - ng-repeat 内的多参数 Angular 过滤器

javascript - Angular 日期范围过滤器不起作用

javascript - 使用 js 映射选中的复选框

javascript - 使用 JQuery 插入 rails partial 时遇到问题

javascript - 为什么 bob instanceof Person 返回 false?

javascript - NodeJS Websocket 客户端保持挂起模式

javascript - 如何为 $http 请求添加进度条

javascript - 出生日期搜索验证 angularjs

javascript - Angular 中唯一的过滤选择列表仅返回数据集中的单个项目