【发布时间】:2021-02-12 00:40:27
【问题描述】:
我正在尝试了解如何在页面刷新后保持树视图的状态。
例如,我有一个文件夹树视图。我点击一个应该展开的文件夹。
之后,我可以点击文件夹内的那个项目(是一个页面的链接,因此整个页面都被刷新了。)
问题是树视图再次关闭文件夹并且不保持其先前的状态。
我需要它是静态的,因此即使在页面重新加载后树视图也不会丢失其状态。
这段代码是我的树视图:
v-list.py-2(v-else, dense)
v-treeview(v-model="tree", :items="treeData", activatable, :open.sync="openIds", @update:open="getOpenIds", item-key="name", open-on-click)
template(v-slot:prepend="{item, open}")
v-list-item(v-if="item.isFolder", link, :href='`/` + item.locale + `/` + item.path', :input-value='path === item.path')
v-list-item-avatar(size="24", tile)
v-icon {{ open ? 'mdi-folder-open' : 'mdi-folder' }}
v-list-item-title {{item.title}}
v-list-item.noFolders(v-else, :href='`/` + item.locale + `/` + item.path', :key='`childpage-` + item.id', :input-value='path === item.path')
v-list-item-avatar(size="24", tile)
v-icon mdi-text-box
v-list-item-title {{item.title}}
另外,我应该提到数据是动态的。我正在使用一种方法生成树(作为对象)。
async buildTree(items){
this.$store.commit(`loadingStart`, 'browse-load')
for(let item of items){
if(item.isFolder){
let result = await this.$apollo.query({
query: gql`
query ($parent: Int, $locale: String!) {
pages {
tree(parent: $parent, mode: ALL, locale: $locale) {
id
path
title
isFolder
pageId
parent
locale
}
}
}
`,
fetchPolicy: 'cache-first',
variables: {
parent: item.id,
locale: this.locale
}
})
item.children = _.get(result, 'data.pages.tree', [])
for(let kid of item.children){
if(item.isFolder){
//kid.name = ""
kid.children = []
}
}
this.buildTree(item.children)
console.log(this.treeData )
}
}
this.$store.commit(`loadingStop`, 'browse-load')
这实际上是应该将树状态保存到本地存储的方法。
getOpenIds(items){
const memory = JSON.stringify(items)
this.sessionIds = sessionStorage.setItem('items2', memory)
this.openIds = JSON.parse(sessionStorage.getItem('items2'))
console.log(this.openIds)
},
我已经尝试了这些建议,但由于某种原因,树对本地存储没有反应。方法是异步的这一事实是否与此有关?
【问题讨论】:
标签: vue.js vuex vuetify.js