首頁(yè)常見(jiàn)問(wèn)題正文

vue-router中常用的hash和history路由模式實(shí)現(xiàn)原理是什么?

更新時(shí)間:2023-05-30 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  Vue RouterVue.js官方的路由管理器,它可以幫助開(kāi)發(fā)者在Vue應(yīng)用中實(shí)現(xiàn)導(dǎo)航和路由功能。Vue Router提供了兩種常用的路由模式:hash模式和history模式。

  1.Hash 模式:

  Hash模式使用URL中的哈希值(即 # 后面的部分)來(lái)模擬路由。當(dāng)URL的哈希值發(fā)生變化時(shí),Vue Router可以根據(jù)哈希值的變化來(lái)匹配相應(yīng)的路由并展示相應(yīng)的組件。

  實(shí)現(xiàn)原理:

  ·在HTML中,我們會(huì)將路由鏈接設(shè)置為帶有#的URL。例如:

<a href="#/home">Home</a>

  ·在Vue Router初始化時(shí),會(huì)監(jiān)聽(tīng)URL的hashchange事件,當(dāng)URL的哈希值發(fā)生變化時(shí),Vue Router會(huì)根據(jù)新的哈希值匹配對(duì)應(yīng)的路由,并展示相應(yīng)的組件。

  ·在Vue Router初始化時(shí),還會(huì)通過(guò)JavaScript動(dòng)態(tài)創(chuàng)建一個(gè)隱藏的iframe元素,并將其src屬性設(shè)置為一個(gè)固定的URL。這個(gè)iframe的作用是在瀏覽器的歷史記錄中保留一個(gè)歷史記錄項(xiàng),以便在用戶點(diǎn)擊后退按鈕時(shí)能夠正確地觸發(fā)路由變化。如下:

// main.js
import Vue from 'vue';
import VueRouter from 'vue-router';
import App from './App.vue';

Vue.use(VueRouter);

const routes = [
  { path: '/home', component: Home },
  { path: '/about', component: About }
];

const router = new VueRouter({
  mode: 'hash',
  routes
});

new Vue({
  router,
  render: h => h(App)
}).$mount('#app');

  2.History模式:

  History模式使用HTML5history API來(lái)實(shí)現(xiàn)路由功能。它利用了瀏覽器的pushState()replaceState()方法來(lái)修改URL,而不會(huì)引起頁(yè)面的刷新。

  實(shí)現(xiàn)原理:

  ·在HTML中,我們會(huì)使用:

<router-link>

  組件或者編程式導(dǎo)航來(lái)觸發(fā)路由的跳轉(zhuǎn)。

  ·在Vue Router初始化時(shí),會(huì)通過(guò)history.pushState()方法或history.replaceState()方法來(lái)修改URL,同時(shí)不刷新頁(yè)面。這樣就可以實(shí)現(xiàn)前端路由的跳轉(zhuǎn)。

  ·在服務(wù)端需要進(jìn)行相應(yīng)的配置,以確保在使用history模式時(shí),當(dāng)用戶在瀏覽器中直接訪問(wèn)某個(gè)路由時(shí),能正確地返回對(duì)應(yīng)的頁(yè)面。如下:

// main.js
import Vue from 'vue';
import VueRouter from 'vue-router';
import App from './App.vue';

Vue.use(VueRouter);

const routes = [
  { path: '/home', component: Home },
  { path: '/about', component: About }
];

const router = new VueRouter({
  mode: 'history',
  routes
});

new Vue({
  router,
  render: h => h(App)
}).$mount('#app');

  在上面的代碼示例中,routes數(shù)組中定義了路由的配置,其中每個(gè)路由對(duì)象包含了路徑和對(duì)應(yīng)的組件。然后,通過(guò)創(chuàng)建一個(gè)VueRouter 實(shí)例,并將其傳遞給Vue實(shí)例router選項(xiàng),即可啟用路由功能。

  需要說(shuō)明的是,以上示例僅展示了Vue Router的基本用法,實(shí)際的應(yīng)用可能還需要更多的配置和組件定義。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!