美文网首页
循环路由,让界面像轮播图一样显示

循环路由,让界面像轮播图一样显示

作者: 尘埃里的玄 | 来源:发表于2021-06-07 07:45 被阅读0次
    image.png
    <template>
      <div>
        <svg-icon class-name="swiper-icon" icon-class="swiper" @click="click"/>
      </div>
    </template>
    
    <script>
        export default {
            name: "HeaderSwiper",
    
            computed: {
                visitedViews() {
                    return this.$store.state.tagsView.visitedViews
                },
                routes() {
                    return this.$store.state.permission.routes
                }
            },
            data() {
                return {
                    flag: false,
                }
            },
            methods: {
                click() {
                    this.flag = !this.flag
                    console.log(this.visitedViews)
                    console.log(this.visitedViews.length)
                    this.goToNewPage(0, this.visitedViews)
    
                },
    
                goToNewPage(index, routes) {
                    if (this.flag) {
                        if (index < routes.length)
                            setTimeout(() => {
                                this.$router.replace({name: routes[index].name})
                                index++
                                this.goToNewPage(index, routes)
                            }, 2000)
                        else
                            this.goToNewPage(0, routes)
                    }
                }
            }
        }
    </script>
    
    <style scoped>
    
    </style>
    
    

    点击过得路由信息放在了vuex中管理

    const state = {
      visitedViews: [],
      cachedViews: []
    }
    
    const mutations = {
      ADD_VISITED_VIEW: (state, view) => {
        if (state.visitedViews.some(v => v.path === view.path)) return
        state.visitedViews.push(
          Object.assign({}, view, {
            title: view.meta.title || 'no-name'
          })
        )
      },
      ADD_CACHED_VIEW: (state, view) => {
        if (state.cachedViews.includes(view.name)) return
        if (!view.meta.noCache) {
          state.cachedViews.push(view.name)
        }
      },
    
      DEL_VISITED_VIEW: (state, view) => {
        for (const [i, v] of state.visitedViews.entries()) {
          if (v.path === view.path) {
            state.visitedViews.splice(i, 1)
            break
          }
        }
      },
      DEL_CACHED_VIEW: (state, view) => {
        const index = state.cachedViews.indexOf(view.name)
        index > -1 && state.cachedViews.splice(index, 1)
      },
    
      DEL_OTHERS_VISITED_VIEWS: (state, view) => {
        state.visitedViews = state.visitedViews.filter(v => {
          return v.meta.affix || v.path === view.path
        })
      },
      DEL_OTHERS_CACHED_VIEWS: (state, view) => {
        const index = state.cachedViews.indexOf(view.name)
        if (index > -1) {
          state.cachedViews = state.cachedViews.slice(index, index + 1)
        } else {
          // if index = -1, there is no cached tags
          state.cachedViews = []
        }
      },
    
      DEL_ALL_VISITED_VIEWS: state => {
        // keep affix tags
        const affixTags = state.visitedViews.filter(tag => tag.meta.affix)
        state.visitedViews = affixTags
      },
      DEL_ALL_CACHED_VIEWS: state => {
        state.cachedViews = []
      },
    
      UPDATE_VISITED_VIEW: (state, view) => {
        for (let v of state.visitedViews) {
          if (v.path === view.path) {
            v = Object.assign(v, view)
            break
          }
        }
      }
    }
    
    const actions = {
      addView({ dispatch }, view) {
        dispatch('addVisitedView', view)
        dispatch('addCachedView', view)
      },
      addVisitedView({ commit }, view) {
        commit('ADD_VISITED_VIEW', view)
      },
      addCachedView({ commit }, view) {
        commit('ADD_CACHED_VIEW', view)
      },
    
      delView({ dispatch, state }, view) {
        return new Promise(resolve => {
          dispatch('delVisitedView', view)
          dispatch('delCachedView', view)
          resolve({
            visitedViews: [...state.visitedViews],
            cachedViews: [...state.cachedViews]
          })
        })
      },
      delVisitedView({ commit, state }, view) {
        return new Promise(resolve => {
          commit('DEL_VISITED_VIEW', view)
          resolve([...state.visitedViews])
        })
      },
      delCachedView({ commit, state }, view) {
        return new Promise(resolve => {
          commit('DEL_CACHED_VIEW', view)
          resolve([...state.cachedViews])
        })
      },
    
      delOthersViews({ dispatch, state }, view) {
        return new Promise(resolve => {
          dispatch('delOthersVisitedViews', view)
          dispatch('delOthersCachedViews', view)
          resolve({
            visitedViews: [...state.visitedViews],
            cachedViews: [...state.cachedViews]
          })
        })
      },
      delOthersVisitedViews({ commit, state }, view) {
        return new Promise(resolve => {
          commit('DEL_OTHERS_VISITED_VIEWS', view)
          resolve([...state.visitedViews])
        })
      },
      delOthersCachedViews({ commit, state }, view) {
        return new Promise(resolve => {
          commit('DEL_OTHERS_CACHED_VIEWS', view)
          resolve([...state.cachedViews])
        })
      },
    
      delAllViews({ dispatch, state }, view) {
        return new Promise(resolve => {
          dispatch('delAllVisitedViews', view)
          dispatch('delAllCachedViews', view)
          resolve({
            visitedViews: [...state.visitedViews],
            cachedViews: [...state.cachedViews]
          })
        })
      },
      delAllVisitedViews({ commit, state }) {
        return new Promise(resolve => {
          commit('DEL_ALL_VISITED_VIEWS')
          resolve([...state.visitedViews])
        })
      },
      delAllCachedViews({ commit, state }) {
        return new Promise(resolve => {
          commit('DEL_ALL_CACHED_VIEWS')
          resolve([...state.cachedViews])
        })
      },
    
      updateVisitedView({ commit }, view) {
        commit('UPDATE_VISITED_VIEW', view)
      }
    }
    
    export default {
      namespaced: true,
      state,
      mutations,
      actions
    }
    
    
    image.png

    相关文章

      网友评论

          本文标题:循环路由,让界面像轮播图一样显示

          本文链接:https://www.haomeiwen.com/subject/tpfteltx.html