最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue+element實現(xiàn)頁面頂部tag思路詳解

 更新時間:2021年12月29日 15:23:11   作者:super美少女戰(zhàn)士  
這篇文章主要介紹了vue+element實現(xiàn)頁面頂部tag效果,頁面顯示由數(shù)組循環(huán)得出,數(shù)組可存儲在store里,tags數(shù)組里面已經(jīng)有值,由于默認是白色,所以頁面上看不出,接下來就是給選中的標簽高亮,需要的朋友可以參考下

在這里插入圖片描述

這種tag如何寫?思路總結下:

1. 頁面渲染

1頁面顯示由數(shù)組循環(huán)得出,數(shù)組可存儲在store里
(1)存儲前判斷是否有重復的數(shù)據(jù),重復的話,先刪除再添加。
(2)沒有重復直接push

 addTag: (state, tag) => {
    const { fullPath, path, meta, query } = tag
    if (tag.path === '/login') {
      return false
    }
    const findIndex = state.tags.findIndex(item => item.path === tag.path)
    console.log(findIndex)
    if (findIndex >= 0) {
      state.tags.splice(findIndex, 1, { fullPath, path, meta, query })
    } else {
      state.tags.push({ fullPath, path, meta, query })
    }
  },

2何時觸發(fā)這個添加路由方法,監(jiān)聽路由進入的時候,調(diào)此方法將當前this實例上的route對象攜帶過去。

computed: {
currentRoute() {
      return this.$route
    },
},
 watch: {
    $route: {
      handler(val) {
        if (val.name) {
          this.addTags()
        }
      },
      // 深度觀察監(jiān)聽
      deep: true
    }
  },
  methods:{
  addTags() {
  //this.$store.dispatch 先提交給action,由他異步處理處罰mutation里面的方法,改變state里面的tags值
      this.$store.dispatch('user/addTag', this.currentRoute)
    },}

此時,tags數(shù)組里面已經(jīng)有值,由于默認是白色,所以頁面上看不出,接下來就是給選中的標簽高亮。
1element 有個參數(shù)可以設定,可以查文檔。
2選中的tag值是否等于當前路由進入的頁面一致,一致則為true。

<span v-for="(tag, index) in tags" :key="index" class="tag-span">
        <el-tag
          :closable="isCloseable"
          :effect="setTagColor(tag)"
          @close="closeTags(tag)"
          @click="toTagRoute(tag)"
        >
          {{ tag.meta.title }}
        </el-tag>
      </span>
 methods:{
 setTagColor(tag) {
      return this.currentRoute.path === tag.path ? 'dark' : 'plain'
    },
    }

此時,tag的渲染和選中就完成了。

2. 來回切換tag

methods:{
 toTagRoute(tag) {
      this.$router.push({
        path: tag.fullPath || tag.path
      })
    },
}

3. 刪除一個tag標簽

1由于是數(shù)組,你無法確定用戶刪除哪一個,所以需要遍歷找出用戶當前選中的tag。然后刪除,同時更新store里的值。
2刪除當前tag,高亮的標簽是哪一個?這里是刪除標簽的前一個標簽,也就是數(shù)組最后一個元素。

methods:{
	 closeTags(tag) {
	      console.log(tag, 4444)
	      this.$store.dispatch('user/delTag', tag)
	      this.toLastTagRouter(this.$store.state.user.tags)//高亮刪除標簽的前一個tag
	    },
     toLastTagRouter(tags) {
      //注意此處傳入tags是已刪除后的,所以不能使用splice==》改變原數(shù)組;slice==》不改變原數(shù)組拿去數(shù)組最后一個元素
      const latestView = tags.slice(-1)[0]//tags數(shù)組最后一個元素
      console.log(latestView)
      if (latestView !== undefined && latestView.path !== undefined) {
        const { fullPath, meta, path, query } = latestView
        this.$router.push({ fullPath, meta, path, query })
      }
    },
}
//action
 delTag({ commit }, tag) {
    commit('delTag', tag)
  },
//mutation
delTag: (state, tag) => {
    //entries()對象變成一個可遍歷的數(shù)組【0,{name:a,age:'20'}】
    //這里使用forEach和map也可以
    for (const [i, v] of state.tags.entries()) {
      if (v.path === tag.path) {
        state.tags.splice(i, 1)
        break
      }
    }
  },

刪除全部標簽

methods:{
 closeAllTags() {
      // 關閉所有 tag,僅剩余一個
      this.$store.dispatch('user/delAllTags')
      const { fullPath, meta, path, query } = this.$store.state.user.tags[0]
      // 跳轉(zhuǎn)剩余 tag 路由
      this.$router.push({ fullPath, meta, path, query })
    },
}
//action
delAllTags({ commit }) {
    commit('delAllTags')
  },
//mutation
 delAllTags: (state) => {
    state.tags.splice(1, state.tags.length)
  },

到此這篇關于vue+element如何實現(xiàn)頁面頂部tag的文章就介紹到這了,更多相關vue element頁面頂部tag內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue3 ref 和reactive的區(qū)別詳解

    vue3 ref 和reactive的區(qū)別詳解

    本文主要介紹了vue3 ref 和reactive的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • vue腳手架配置預渲染及prerender-spa-plugin配置方式

    vue腳手架配置預渲染及prerender-spa-plugin配置方式

    這篇文章主要介紹了vue腳手架配置預渲染及prerender-spa-plugin配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Vue調(diào)試神器vue-devtools安裝方法

    Vue調(diào)試神器vue-devtools安裝方法

    本篇文章主要介紹了Vue調(diào)試神器vue-devtools安裝方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Vue中瀑布流布局與圖片加載優(yōu)化的實現(xiàn)

    Vue中瀑布流布局與圖片加載優(yōu)化的實現(xiàn)

    本文主要介紹了Vue中瀑布流布局與圖片加載優(yōu)化的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • vue監(jiān)聽頁面滾動到某個高度觸發(fā)事件流程

    vue監(jiān)聽頁面滾動到某個高度觸發(fā)事件流程

    這篇文章主要介紹了vue監(jiān)聽頁面滾動到某個高度觸發(fā)事件流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 使用vue-cli創(chuàng)建vue2項目的實戰(zhàn)步驟詳解

    使用vue-cli創(chuàng)建vue2項目的實戰(zhàn)步驟詳解

    相信大部分Vue開發(fā)者都使用過vue-cli來構建項目,它的確很方便,但對于很多初級開發(fā)者來說,還是要踩不少坑的,下面這篇文章主要給大家介紹了關于使用vue-cli創(chuàng)建vue2項目的實戰(zhàn)步驟,需要的朋友可以參考下
    2023-01-01
  • Vue使用vue-drag-resize生成懸浮拖拽小球

    Vue使用vue-drag-resize生成懸浮拖拽小球

    這篇文章主要為大家詳細介紹了Vue使用vue-drag-resize生成懸浮拖拽小球,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • VUE中的自定義指令鉤子函數(shù)講解

    VUE中的自定義指令鉤子函數(shù)講解

    這篇文章主要介紹了VUE中的自定義指令鉤子函數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue如何通過點擊事件彈出彈窗頁面詳解

    vue如何通過點擊事件彈出彈窗頁面詳解

    彈窗是我們開發(fā)中經(jīng)常遇到的一個功能,下面這篇文章主要給大家介紹了關于vue如何通過點擊事件彈出彈窗頁面的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Vue路由傳遞參數(shù)與重定向的使用方法總結

    Vue路由傳遞參數(shù)與重定向的使用方法總結

    路由的本質(zhì)就是一種對應關系,比如說我們在url地址中輸入我們要訪問的url地址之后,瀏覽器要去請求這個url地址對應的資源,下面這篇文章主要給大家介紹了關于Vue路由傳遞參數(shù)與重定向的使用方法,需要的朋友可以參考下
    2022-10-10

最新評論

礼泉县| 锡林郭勒盟| 盐边县| 共和县| 渭源县| 申扎县| 科技| 邹平县| 富平县| 抚顺市| 邹城市| 鄯善县| 芮城县| 龙井市| 沂南县| 龙里县| 香格里拉县| 乌兰浩特市| 社旗县| 云阳县| 康乐县| 桑植县| 佛坪县| 日土县| 天峨县| 紫金县| 峨眉山市| 禄丰县| 宁德市| 邵武市| 霍林郭勒市| 开鲁县| 民乐县| 裕民县| 孝感市| 上杭县| 曲靖市| 沅江市| 达州市| 达日县| 双鸭山市|