刷新页面后出现localStorage / localForage问题

时间:2015-03-13 18:16:47

标签: javascript angularjs local-storage localforage

我正在使用localForage,我有一件好事,另一件非常糟糕的事情,我一直试图解决过去2小时,我认为这更容易,但这就是我在这里的原因。

我有一个名为sports的数组,可选择选中或取消选中它们,一旦取消选中或checked = false - 无论你想要什么 - 这些项目都保存在数据库中,但他们认为当用户首先在会话中时保存在localForage中。

好的部分: 如果您checked = false数组上的任何项目并注销,并且他们登录,则您未设置的项目仍然存在,该部分工作正常。

不好的部分: 如果您checked = false数组上的任何项目并刷新页面,则项checked = false将返回checked = true

因此,这意味着刷新页面后,只有当您注销并再次登录时,数据才会持久存在。

我正在使用名为forceTrip的内容,您将在下面的代码中看到。

一切都与服务有关,请看

angular.module('myApp')
  .factory('SportsFactory', function($http, $q, AuthFactory,
           LocalForageFactory, LeaguesFactory, CONSTANT_VARS) {
    return {
      getSports: function(customer, forceTrip) {
        forceTrip = forceTrip || false;
        var defer = $q.defer(),
        _this = this;

        if (forceTrip) {
         LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_SPORTS)
        }

        LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS)

              $http.get(CONSTANT_VARS.BACKEND_URL + '/lines/sports/' + customer.agent)
                .success(function(sports) {
                  sports = _.sortBy(sports, function(sport) {
                    return sport.priority;
                  });

          //HERE I CALL GETSPORTCHECKED();
                  _this.getSportChecked(customer).then(function(sportChecked) {
                    var sportIds = _.pluck(sports, 'id'),
                        intersectedSports = _.intersection(sportIds, sportChecked.sport);
                    if (sports.length) {
                      sports = _.map(sports, function(sport) {
                        sport.checked = !_.includes(intersectedSports, sport.id);
                        return sport;
                      });
                    }
                  });
                  LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS, sports);
                  defer.resolve(sports);
                })
                .error(function(err) {
                  defer.reject(err);
                });
            }
          });
        return defer.promise;
      },

      setSportChecked: function(params) {
        var defer = $q.defer();
        $http.post(CONSTANT_VARS.BACKEND_URL + '/sports/checked', params)
        .success(function(sportChecked) {
            LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED, params);
            defer.resolve(sportChecked);
          })
          .error(function(err) {
            console.log(err);
            defer.reject(err);
          });
        return defer.promise;
      },

      getSportChecked: function(customer, forceTrip) {
        forceTrip = forceTrip || false;
        var defer = $q.defer(),
            user,
            rejection = function(err) {
              defer.reject(err);
            };

        if (forceTrip) {
          LocalForageFactory.remove(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED);
        }
        LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED)
          .then(function(sportChecked) {
            user = customer.customer;
              $http.get(CONSTANT_VARS.BACKEND_URL + '/sports/getChecked/' + user)
              .success(function(sportChecked) {
                LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS_CHECKED, sportChecked);
                defer.resolve(sportChecked);
              })
              .error(rejection);
            }
          }, rejection);
        return defer.promise;
      }

  };    
});

一旦setSportChecked任何项目checked = false发出获取getSportChecked项的获取请求,checked = falsegetSports函数就会执行帖子请求你可以看到我正在呼叫_this.getSportChecked(customer),你认为我能在这做什么?

0 个答案:

没有答案