對于Vue中的hash路由,它是一種基于瀏覽器URL后#號的前端路由方式。在使用它時,每次切換路由時,瀏覽器的URL會發(fā)生變化,但頁面不會進行刷新,從而達到單頁應(yīng)用的效果。這種路由方式的原理是在URL最后面添加#符號,并通過window.location.hash獲取到路由信息,然后根據(jù)路由信息動態(tài)渲染對應(yīng)的組件。
const routes = [ { path: '/', component: Home }, { path: '/about', component: About }, { path: '/contact', component: Contact } ]; const router = new VueRouter({ routes: routes, mode: 'hash' });
在上述代碼中,我們可以看到Vue中聲明路由的方式,其中mode屬性設(shè)置為hash。這表明我們在使用Vue Router時,將采用hash路由的方式。
在實現(xiàn)hash路由時,我們需要通過window.location.hash獲取到當前的hash值,并且在hash值變化時觸發(fā)一個事件來重新渲染組件。這里我們可以使用瀏覽器提供的onhashchange事件來實現(xiàn)。
window.addEventListener('hashchange', function () { // 根據(jù)當前hash值渲染對應(yīng)的組件 });
另外,我們還需要處理路由地址中的參數(shù)和查詢參數(shù)。在hash路由中,參數(shù)通常被寫在路由地址中,而查詢參數(shù)則被寫在hash符號后面的“?”和“&”中。所以,我們需要通過解析window.location.hash來獲取到參數(shù)和查詢參數(shù)。
const hash = window.location.hash.replace(/^#\/?/, ''); const [path, query] = hash.split('?');
在解析出路由地址和查詢參數(shù)后,我們可以通過Vue Router提供的router.replace方法來改變URL,達到切換路由的效果。
router.replace({ path: '/about', query: { foo: 'bar' } })
此外,還需要注意的是在使用hash路由時,我們應(yīng)該避免直接使用a標簽的href屬性來切換路由,因為這樣會導(dǎo)致瀏覽器進行頁面刷新,而我們想要的是單頁應(yīng)用的效果。所以,我們應(yīng)該使用Vue Router提供的router-link組件來切換路由。
About
綜上所述,Vue中的hash路由是通過在URL地址中添加#符號,通過window.location.hash獲取到路由信息,并且在hash值變化時通過onhashchange事件重新渲染對應(yīng)的組件。在實現(xiàn)時,我們還需要解析路由地址中的參數(shù)和查詢參數(shù),并且通過Vue Router提供的方法來改變URL。