在我的應(yīng)用程式中,我設(shè)定了一個底部導(dǎo)航元件,如下所示:
<v-bottom-navigation v-else background-color="overlay" grow app color="primary" > <v-btn v-for="(route, key) in routes" ref="link" :key="'route' + key" :to="route.to" min-width="48" class="px-0" > <span v-if="$vuetify.breakpoint.smAndUp">{{ route.name }}</span> <v-icon>{{ route.icon }}</v-icon> </v-btn> </v-bottom-navigation>
這個工作得很好,我可以像預(yù)期的那樣使用它在我的應(yīng)用程式中導(dǎo)航。當(dāng)點擊底部導(dǎo)覽中的一個按鈕時,按鈕狀態(tài)會更新,顯示為活動狀態(tài)(主要顏色)。
我的路由定義如下:
routes: [ { icon: mdiViewDashboard, name: 'Dashboard', to: '/dashboard' }, { icon: mdiCart, name: 'Orders', to: '/orders' }, { icon: mdiDolly, name: 'Receiving', to: '/receiving' }, { icon: mdiClipboardText, name: 'Tasks', to: '/tasks' }, { icon: mdiTruck, name: 'Deliveries', to: '/deliveries' }, ],
我還有一個額外的路由/settings
,它不是底部導(dǎo)航的一部分,而是在我的應(yīng)用程式的標(biāo)題列上定義的,如下所示:
<v-btn aria-label="Settings" icon to="/settings" > <v-icon>{{ mdiCog }}</v-icon> </v-btn>
由於設(shè)定按鈕/路由連結(jié)不是底部導(dǎo)航的一部分,當(dāng)我點擊設(shè)定按鈕時,它會停用底部導(dǎo)航按鈕的活動狀態(tài),這是正確的,因為它不是底部導(dǎo)航的一部分。
以下是奇怪的行為發(fā)生的地方:
如果我在底部導(dǎo)航定義的一個路由中,並且強制刷新頁面,我會刷新到正確的位置。從這裡開始,如果我點擊設(shè)置按鈕,路由器會顯示設(shè)置,但是底部導(dǎo)航的舊狀態(tài)仍然顯示為活動狀態(tài)。這只會發(fā)生在強制刷新時,如果我選擇底部導(dǎo)航路由,然後轉(zhuǎn)到設(shè)置,它會從底部導(dǎo)航按鈕中移除活動狀態(tài)。
在我的研究中,我認為這可能是與路由連結(jié)的exact
屬性有關(guān)的問題,但似乎沒有任何區(qū)別。
另外,我設(shè)定了一個斷點,以在小尺寸及以下顯示底部導(dǎo)覽欄,如果我拉伸視窗以隱藏底部導(dǎo)覽欄,然後縮小視窗以重新顯示,當(dāng)組件再次顯示時,它具有正確的狀態(tài)。
重新載入頁面並不是重現(xiàn)這個錯誤的唯一方法。導(dǎo)航群組中的按鈕似乎可以透過VItemGroup
邏輯和VBtn的routable
mixin進行切換。您可以透過點擊任何導(dǎo)航按鈕兩次並在此之後路由到/settings
來複製該問題。如果您檢查處於該狀態(tài)的元素,則活動類別v-btn--active
會重複3次。路由到另一個頁面只會刪除v-btn--active v-btn--active
的精確符合項,而第三個則會保留在元素上。
顯然,這不是預(yù)期的行為。
但解決方法非常簡單。將每個按鈕的active-class
屬性設(shè)為'v-btn--active'
以外的任何值即可解決問題。
所以,例如:
<v-btn v-for="(route, key) in routes" ref="link" :key="'route' + key" :to="route.to" min-width="48" class="px-0" active-class="" > <span v-if="$vuetify.breakpoint.smAndUp">{{ route.name }} </span> <v-icon>{{ route.icon }}</v-icon> </v-btn>