我正在与 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
后执行发布请求,并发出 get 请求以获取项目,并且您可以看到我正在调用,那么您认为我可以在这里做什么?checked = false
getSportChecked
checked = false
getSports
_this.getSportChecked(customer)