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

vue路由 遍歷生成復(fù)數(shù)router-link的例子

 更新時間:2019年10月30日 11:24:23   作者:qwezxc24680  
今天小編就為大家分享一篇vue路由 遍歷生成復(fù)數(shù)router-link的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

業(yè)務(wù)場景:使用vue-cli做一個spa;

需求:頂部導(dǎo)航欄控制下方內(nèi)容欄,實(shí)現(xiàn)頁面內(nèi)切換。

毫無疑問,vue-router很適合這樣的需求,實(shí)現(xiàn)起來也并不復(fù)雜:

1、main.js:

import VueRouter from 'vue-router'
Vue.use(VueRouter);

2、定義(路由)組件:

import songList from './components/songList.vue'
 
const Bar = { template: '<div>no.2</div>' }
const Baz = { template: '<div>no.3</div>' }
const Fun = { template: '<div>no.4</div>' }

這里的組件也可以從外部導(dǎo)入,說起來應(yīng)該是正確的做法,博主為了演示方便才直接寫在里面了...

3、定義路由:

const routes = [
 { path: '/新歌',
 component: songList
 },
 { path: '/排行',
 component: Bar
 },
 { path: '/榜單',
 component: Baz
 },
 { path: '/歌手',
 component: Fun
 },
 { path: '*',
 redirect: '/新歌'
 }
]

注意,最后設(shè)置了一個重定向路由,目的是當(dāng)路徑不屬于以上任意一個時,匹配到‘新歌'頁面;說白了也就是設(shè)置初始頁的路由。

4、創(chuàng)建router實(shí)例:

const router = new VueRouter({
 routes//等價routes: routes
})

5、創(chuàng)建和掛載根實(shí)例:

new Vue({
 router,
 el: '#app',
 render: h => h(App)
})

navBar.vue:

在組件頁面上,按照常理應(yīng)該分別寫出具體數(shù)目的導(dǎo)航標(biāo)簽,類似下面這樣:

<router-link to="/新歌">新歌</router-link>
<router-link to="/排行">排行</router-link>
<router-link to="/榜單">榜單</router-link>
<router-link to="/歌手">歌手</router-link>

但實(shí)際運(yùn)用上有個小問題,就是像這樣重復(fù)樣式的路由入口真的有必要每個都寫一遍么?唯一的區(qū)別僅僅是to屬性不同?

萬一今后碰到十幾、二十個怎么辦?

于是換個思路,嘗試遍歷數(shù)組來生成復(fù)數(shù)個路由入口:

<span v-for="(bar, index) in title" :key="index">
 <router-link to="">
 {{ bar }}
 </router-link>
</span>

大致如上,title是一個所有名目的數(shù)組:[ 新歌,排行,榜單,歌手,... ],Index索引用來綁定key值。現(xiàn)在唯一的問題 就是to也就是路由入口路徑該怎么寫?

由于每個都會渲染成不同出口,所以不能寫成絕對路徑。

方案一:將main.js中的路徑都變成title中的名稱,再在to中用拼接字符串實(shí)現(xiàn)動態(tài)匹配。

實(shí)際操作下來發(fā)現(xiàn)并不可取,因?yàn)樵趆tml中只會識別to=“”中雙引號內(nèi)的內(nèi)容,更不能使用‘+'這類js才能識別的拼接符號。

方案二:使用編程式導(dǎo)航,

methods: {
 linkChange: function (bar) {
  this.$router.push({ path: '/'+bar});
 }
 }

<span v-for="(bar, index) in title" :key="index">
 <router-link to="" @click.native="linkChange(bar)">
 {{ bar }}
 </router-link>
</span>

這種方法將路徑寫在methods中就可以使用每次遍歷數(shù)組獲得的值,從而實(shí)現(xiàn)動態(tài)匹配。

為什么要給click事件加上native后綴?

這里是個很典型的router-link的小坑,因?yàn)闉g覽器會把router-link渲染成a標(biāo)簽,那么在router-link上添加的事件都會失效。

解決方案就是加上.native后綴來阻止原生事件。

但這種方式也有個很嚴(yán)重的BUG,即在遍歷中使用編程式導(dǎo)航,會導(dǎo)致所有入口響應(yīng)這個點(diǎn)擊事件!

具體說來就是當(dāng)用戶點(diǎn)擊某個路由,所有的入口都會被vue識別為選中路由,頁面邏輯可能看不出來,

但只要加個.router-link-active { background: #f4f4f4 }這種vue給當(dāng)前路由默認(rèn)添加的class設(shè)置一個背景色,就能發(fā)現(xiàn)所有路由入口元素

一起變色!

這個bug在不使用遍歷,依次給span設(shè)置路由的時候不會出現(xiàn),具體原因希望有大神可以告知。

所以此方案也只能放棄。

方案三:

在html中綁定to屬性,

<span v-for="(bar, index) in title" :key="index">
 <router-link :to="{ path: '/'+bar }">
 {{ bar }}
 </router-link>
</span>

想了太多復(fù)雜的方案,反而忽略了最基本的綁定to屬性,

最方便的地方在于,大括號內(nèi)既可以像我一樣寫完整路徑,也可以直接寫成:to="{ path: bar }",效果是一樣的。

而且相比前面的方法,可以省去額外的點(diǎn)擊事件,利用其本身的路徑特性來完成。

到目前為止,需求可以算是基本完成,但細(xì)節(jié)還能不能更完美一點(diǎn)呢?

就拿這個例子來說,我們用span標(biāo)簽包裹了渲染成a標(biāo)簽的router-link,有時候我們想要選中的標(biāo)簽字體變成藍(lán)色,同時span下面出現(xiàn)藍(lán)色邊框,

提高用戶體驗(yàn)。那么使用.router-link-active改變a標(biāo)簽顏色是最方便的了,問題是上一級的span該如何添加樣式呢?

似乎不添加額外class或id這種標(biāo)識是無法實(shí)現(xiàn)功能的,但我在vue官網(wǎng)上看到這么一句話:“有時候我們要讓 "激活時的CSS類名" 應(yīng)用在外層元素,而不是 <a> 標(biāo)簽本身,那么可以用 <router-link> 渲染外層元素,包裹著內(nèi)層的原生 <a> 標(biāo)簽”。

代碼如下:

<router-link tag="span" :to="{ path: bar }" v-for="(bar, index) in title" :key="index">
  <a>
  {{ bar }}
  </a>
 </router-link>

使用tag標(biāo)簽改變其渲染元素,包裹a標(biāo)簽。如此一來,.router-link-active添加span底邊框,.router-link-active a 來改變字體顏色。

不需要使用額外標(biāo)記也能完成樣式需求。

以上這篇vue路由 遍歷生成復(fù)數(shù)router-link的例子就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue使用Swiper封裝輪播圖組件的方法詳解

    Vue使用Swiper封裝輪播圖組件的方法詳解

    Swiper是一個很常用的用于實(shí)現(xiàn)各種滑動效果的插件,PC端和移動端都能很好的適配。本文將利用Swiper實(shí)現(xiàn)封裝輪播圖組件,感興趣的可以了解一下
    2022-09-09
  • 淺談VUE項(xiàng)目打包后運(yùn)行頁面一片白問題

    淺談VUE項(xiàng)目打包后運(yùn)行頁面一片白問題

    本文主要介紹了淺談VUE項(xiàng)目打包后運(yùn)行頁面一片白問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-01-01
  • Vue.js實(shí)現(xiàn)大屏數(shù)字滾動翻轉(zhuǎn)效果

    Vue.js實(shí)現(xiàn)大屏數(shù)字滾動翻轉(zhuǎn)效果

    大屏數(shù)字滾動翻轉(zhuǎn)效果來源于最近工作中element后臺管理頁面一張大屏的UI圖,該UI圖上有一個模塊需要有數(shù)字往上翻動的效果。本文通過截圖代碼的形式給大家介紹Vue.js實(shí)現(xiàn)大屏數(shù)字滾動翻轉(zhuǎn)效果,感興趣的朋友一起看看吧
    2019-11-11
  • Vite中使用Ant?Design?Vue3.x框架教程示例

    Vite中使用Ant?Design?Vue3.x框架教程示例

    這篇文章主要為大家介紹了Vite中使用Ant?Design?Vue3.x框架教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 一文了解Vue中的nextTick

    一文了解Vue中的nextTick

    Vue中的 nextTick 涉及到Vue中DOM的異步更新,感覺很有意思,特意了解了一下。其中關(guān)于 nextTick 的源碼涉及到不少知識,很多不太理解,暫且根據(jù)自己的一些感悟介紹下 nextTick
    2019-05-05
  • vue高德地圖繪制行政區(qū)邊界功能

    vue高德地圖繪制行政區(qū)邊界功能

    這篇文章主要介紹了vue高德地圖繪制行政區(qū)邊界功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-03-03
  • vue3的自定義hook函數(shù)使用

    vue3的自定義hook函數(shù)使用

    這篇文章主要介紹了vue3的自定義hook函數(shù)使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue前端數(shù)值轉(zhuǎn)換為千分位格式并保留兩位小數(shù)代碼示例

    Vue前端數(shù)值轉(zhuǎn)換為千分位格式并保留兩位小數(shù)代碼示例

    在Vue.js開發(fā)中我們經(jīng)常會遇到需要將數(shù)字格式化為保留兩位小數(shù)的情況,下面這篇文章主要給大家介紹了關(guān)于Vue前端數(shù)值轉(zhuǎn)換為千分位格式并保留兩位小數(shù)的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • 一定要知道的 25 個 Vue 技巧

    一定要知道的 25 個 Vue 技巧

    這篇文章主要給大家分享將 prop 限制為類型列表、默認(rèn)內(nèi)容和擴(kuò)展點(diǎn)、使用引號觀察嵌套值、知道何時使用 v-if、單作用域 slot 的簡寫、有條件地渲染slot等25 個Vue 技巧,下文是下相關(guān)資料,需要的朋友可以參考一下
    2021-11-11
  • vue 計(jì)時器組件的實(shí)現(xiàn)代碼

    vue 計(jì)時器組件的實(shí)現(xiàn)代碼

    本篇文章主要介紹了vue 計(jì)時器組件的實(shí)現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論

和田市| 遂溪县| 巫溪县| 长垣县| 泌阳县| 繁峙县| 永顺县| 肥乡县| 石嘴山市| 佛冈县| 行唐县| 平度市| 丹寨县| 霍城县| 舒兰市| 普陀区| 大冶市| 云龙县| 白山市| 五大连池市| 正蓝旗| 阜阳市| 莆田市| 上饶县| 东平县| 东台市| 江都市| 拉萨市| 江安县| 吉安市| 明光市| 江阴市| 耿马| 略阳县| 泸西县| 宁强县| 嘉兴市| 方山县| 丘北县| 霞浦县| 鲜城|