iT邦幫忙

2

【Bootstrap】【Vue】不會自己收闔的Navbar

  • 分享至 

  • xImage
  •  

【前言】
本系列為個人前端學習之路的學習筆記,在過往的學習過程中累積了很多筆記,如今想藉著IT邦幫忙這個平台做整理+再複習。
本系列標題一律以【】標示該篇文章主要涉及的內容,例如【JavaScript】、【Vue】等等。
若內容有誤,還麻煩各路大神不吝於點出問題,感激不敬。


Bootstrap是使用率非常高的前端框架,裡面有很多設計好的components可以直接拿來使用
其中Navbar便是一個
官網連結:Bootstrap官方網站的Navbar

而本文正是因為近期在做專案的時候,在使用Bootstrap的Navbar上發現了一些心得
因此才會撰寫此文

Bootstrap的Navbar不會自己收起來?

在最標準的Bootstrap Navbar中,在lg以下就會變成俗稱的漢堡選單(如下圖)
https://ithelp.ithome.com.tw/upload/images/20220407/201288639KpCoIDPW7.jpg

當我們點擊右方的按鈕時,選單就會展開(如下圖)
https://ithelp.ithome.com.tw/upload/images/20220407/201288633XxGmo1aLW.jpg

然而,由於我的專案使用了Vue CLI + Vue Router
同時我將Navbar獨立成一個元件,因此當我們點選了選單內的連結,跳轉到其他頁面的時候
Vue並不會重新渲染Navbar元件,因此選單卻不會自己收起來,它會跟卡比獸一樣卡著

因此,在這個專案中,我就必須想辦法讓它在跳頁的時候自己收闔起來

個人解法

由於這是最近在做專案的時候遇到的問題,因此就單純分享我的解法
畢竟根據專案情況的不同,有很多種寫法都可以做到一樣的事情

我的專案是使用Vue CLI + Vue Router
因此是Navbar裡面主要就是<router-link>,對應Vue Router的路由表

個人解法:

watch: {
    $route(){
          if(document.body.offsetWidth < 992){
              this.$refs.navbarBtn.click();
          }
    }
}

使用watch來直接watch $route,當$route發生改變時,便會執行{ }中的程式碼
這裡用document.body.offsetWidth來得到螢幕寬度,而992正是Bootstrap的lg
因此if(document.body.offsetWidth < 992){...}這段的意思就是,當Bootstrap Navbar變成漢堡選單時,執行{ }內的程式碼
而我做的事情也非常簡單,就是再按一次按鈕
前面有提到使用者再點一次漢堡選單的按鈕會收起來
因此,我就透過執行click()事件來達到再點一次按鈕的行為,這樣跳頁之後選單就自動收起來了


以上就是今天的一點小心得分享,謝謝大家


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Floralt 昀翰
iT邦新手 4 級 ‧ 2022-04-08 10:47:49

應該是你錯用他的情境
正常來說所謂的跳轉會發生 document load
頁面會重新渲染,不會發生不收起來的情況

看更多先前的回應...收起先前的回應...

感謝指導,小弟不才
想請問這是因為我是在Vue CLI + Vue Router的情況下
使用前端模擬路由才會出現的狀況嗎(因為Navbar元件不會重新渲染),但一般的跳轉會

一般的直接跳轉,例如跳到b.html就會是另一個 Navbar這樣,預設又是收闔的所以不會有這問題的意思(?

對,各有好壞

前端為了省資源有的component不會刷新

了解了,感謝您的補充!

我要留言

立即登入留言