我正在使用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 = false
,getSports
函数就会执行帖子请求你可以看到我正在呼叫_this.getSportChecked(customer)
,你认为我能在这做什么?