我目前正在使用Vue.js / Cordova应用,并且我正在使用VueX-persist将商店保存在本地存储中。
在商店内,我跟踪在应用程序登录页面上显示的当前应用程序版本。我的问题似乎在iOS和Android上有所不同,但都存在相同的问题,即当我重新安装应用程序时无法清除存储空间。
例如,我安装了版本为1.0.7的应用程序,然后将版本更改为1.0.8,并添加了一些硬编码文本,因此我知道这是在安装更新的应用程序。
Store.js:
state: {
appVersion: '1.0.8',
}
Login.vue:
<p>Should be version - 1.0.8 / Store Version is - {{$store.getters.appVersion}}</p>
新应用程序安装了硬编码文本,但版本仍显示1.0.7,这在iOS和Android上发生。
当我卸载该应用程序并尝试重新安装它时,两者之间就有所不同。
在iOS上,所有内容都会正确更新并且可以正常运行。与android一样,即使卸载该应用程序也不会对其进行更新。我必须手动清除本地存储并刷新应用程序才能进行更改。但是,更奇怪的是,一旦我删除了该应用程序并再次尝试'cordova run android'
,它又回到了1.0.0,这是我制作的第一个版本。
我尝试删除平台并重新添加它们,然后重新运行以下
npm run build
cordova run ios
cordova run android
更新:
我再次将版本更新为1.0.10,然后运行此代码以检查存储中的版本以及本地存储中保存的版本,但是两者都报告了1.0.9(旧存储的版本)
// Function to migrate store data to keep it up dated after app updates
const migrateStoreData = function () {
const previousStoreData = JSON.parse(localStorage.getItem('appStore'));
console.log('Previous: ', previousStoreData.appVersion);
console.log('Current: ', store.getters.appVersion);
};
migrateStoreData();
答案 0 :(得分:1)
这是默认行为,我认为这样可以。 否则,用户必须在每次更新应用后登录。
但是,当然,在某些情况下,您必须迁移存储的数据。
这就是为什么我在main.js中运行一个迁移,该迁移仅比较两个版本(currentAppVersion和storedAppVersion)
如果要从localStorage删除所有内容,则必须转到
Settings->Apps
搜索您的App,然后在存储区上滑动一下。
现在,您有2个按钮可以删除所有内容。
希望对您有帮助
答案 1 :(得分:0)
我设法对Vuex Persist使用了reducer以从商店中排除'appVersion'值。
const vuexPersist = new VuexPersist({
key: 'appStore',
storage: localStorage,
reducer: state => // exclude certain values from being persisted
Object.keys(state).reduce((acc, curr) => {
if (!['appVersion'].includes(curr)) acc[curr] = state[curr];
return acc;
}, {}),
});