摘要:路由模塊的本質就是建立起和頁面之間的映射關系。這時候我們可以直接利用傳值了使用來匹配路由,然后通過來傳遞參數跳轉對應路由配置于是我們可以獲取參數六配置子路由二級路由實際生活中的應用界面,通常由多層嵌套的組件組合而成。
一、前言
要學習vue-router就要先知道這里的路由是什么?為什么我們不能像原來一樣直接用標簽編寫鏈接哪?vue-router如何使用?常見路由操作有哪些?等等這些問題,就是本篇要探討的主要問題。
二、vue-router是什么這里的路由并不是指我們平時所說的硬件路由器,這里的路由就是SPA(單頁應用)的路徑管理器。再通俗的說,vue-router就是WebApp的鏈接路徑管理系統。
vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,適合用于構建單頁面應用。vue的單頁面應用是基于路由和組件的,路由用于設定訪問路徑,并將路徑和組件映射起來。傳統的頁面應用,是用一些超鏈接來實現頁面切換和跳轉的。在vue-router單頁面應用中,則是路徑之間的切換,也就是組件的切換。路由模塊的本質 就是建立起url和頁面之間的映射關系。
至于我們為啥不能用a標簽,這是因為用Vue做的都是單頁應用(當你的項目準備打包時,運行npm run build時,就會生成dist文件夾,這里面只有靜態資源和一個index.html頁面),所以你寫的標簽是不起作用的,你必須使用vue-router來進行管理。
三、vue-router實現原理SPA(single page application):單一頁面應用程序,只有一個完整的頁面;它在加載頁面時,不會加載整個頁面,而是只更新某個指定的容器中內容。單頁面應用(SPA)的核心之一是: 更新視圖而不重新請求頁面;vue-router在實現單頁面前端路由時,提供了兩種方式:Hash模式和History模式;根據mode參數來決定采用哪一種方式。
1、Hash模式:vue-router 默認 hash 模式 —— 使用 URL 的 hash 來模擬一個完整的 URL,于是當 URL 改變時,頁面不會重新加載。 hash(#)是URL 的錨點,代表的是網頁中的一個位置,單單改變#后的部分,瀏覽器只會滾動到相應位置,不會重新加載網頁,也就是說hash 出現在 URL 中,但不會被包含在 http 請求中,對后端完全沒有影響,因此改變 hash 不會重新加載頁面;同時每一次改變#后的部分,都會在瀏覽器的訪問歷史中增加一個記錄,使用”后退”按鈕,就可以回到上一個位置;所以說Hash模式通過錨點值的改變,根據不同的值,渲染指定DOM位置的不同數據。hash 模式的原理是 onhashchange 事件(監測hash值變化),可以在 window 對象上監聽這個事件。
2、History模式:由于hash模式會在url中自帶#,如果不想要很丑的 hash,我們可以用路由的 history 模式,只需要在配置路由規則時,加入"mode: "history"",這種模式充分利用了html5 history interface 中新增的 pushState() 和 replaceState() 方法。這兩個方法應用于瀏覽器記錄棧,在當前已有的 back、forward、go 基礎之上,它們提供了對歷史記錄修改的功能。只是當它們執行修改時,雖然改變了當前的 URL ,但瀏覽器不會立即向后端發送請求。
//main.js文件中 const router = new VueRouter({ mode: "history", routes: [...] })
當你使用 history 模式時,URL 就像正常的 url,例如 http://yoursite.com/user/id,比較好看!
不過這種模式要玩好,還需要后臺配置支持。因為我們的應用是個單頁客戶端應用,如果后臺沒有正確的配置,當用戶在瀏覽器直接訪問 http://oursite.com/user/id 就會返回 404,這就不好看了。
所以呢,你要在服務端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態資源,則應該返回同一個 index.html 頁面,這個頁面就是你 app 依賴的頁面。
export const routes = [ {path: "/", name: "homeLink", component:Home} {path: "/register", name: "registerLink", component: Register}, {path: "/login", name: "loginLink", component: Login}, {path: "*", redirect: "/"}]
此處就設置如果URL輸入錯誤或者是URL 匹配不到任何靜態資源,就自動跳到到Home頁面
3、使用路由模塊來實現頁面跳轉的方式方式1:直接修改地址欄
方式2:this.$router.push(‘路由地址’)
方式3:
1:下載 npm i vue-router -S
2:在main.js中引入 import VueRouter from "vue-router";
3:安裝插件Vue.use(VueRouter);
4:創建路由對象并配置路由規則 let router = new VueRouter({routes:[{path:"/home",component:Home}]});
5:將其路由對象傳遞給Vue的實例,options中加入 router:router
6:在app.vue中留坑
具體實現請看如下代碼:
//main.js文件中引入 import Vue from "vue"; import VueRouter from "vue-router"; //主體 import App from "./components/app.vue"; import Home from "./components/home.vue" //安裝插件 Vue.use(VueRouter); //掛載屬性 //創建路由對象并配置路由規則 let router = new VueRouter({ routes: [ //一個個對象 { path: "/home", component: Home } ] }); //new Vue 啟動 new Vue({ el: "#app", //讓vue知道我們的路由規則 router: router, //可以簡寫router render: c => c(App), })
最后記得在在app.vue中“留坑”
//app.vue中五、 vue-router參數傳遞
聲明式的導航
在路由文件src/router/index.js里配置name屬性
routes: [ { path: "/", name: "Hello", component: Hello } ]
模板里(src/App.vue)用$route.name來接收 比如:
{{ $route.name}}
2 通過這種傳參方法的基本語法:
valueString
比如先在src/App.vue文件中
Hi頁面1
然后把src/router/index.js文件里給hi1配置的路由起個name,就叫hi1.
{path:"/hi1",name:"hi1",component:Hi1}
最后在模板里(src/components/Hi1.vue)用$route.params.username進行接收.
{{$route.params.username}}-{{$route.params.id}}3 利用url傳遞參數----在配置文件里以冒號的形式設置參數。
我們在/src/router/index.js文件里配置路由
{ path:"/params/:newsId/:newsTitle", component:Params }
我們需要傳遞參數是新聞ID(newsId)和新聞標題(newsTitle).所以我們在路由配置文件里制定了這兩個值。
在src/components目錄下建立我們params.vue組件,也可以說是頁面。我們在頁面里輸出了url傳遞的的新聞ID和新聞標題。
{{ msg }}
新聞ID:{{ $route.params.newsId}}
新聞標題:{{ $route.params.newsTitle}}
在App.vue文件里加入我們的
router-link跳轉Query
對應路由配置:
{ path: "/query", name: "Query", component: Query }
于是我們可以獲取參數:
this.$route.query.queryId六、vue-router配置子路由(二級路由)
實際生活中的應用界面,通常由多層嵌套的組件組合而成。同樣地,URL中各段動態路徑也按某種結構對應嵌套的各層組件,例如:
如何實現下圖效果(H1頁面和H2頁面嵌套在主頁中)?
1.首先用
主頁 H1頁面 H2頁面
2.在HelloWorld.vue加入
{{ msg }}
3.在components目錄下新建兩個組件模板 H1.vue 和 H2.vue
兩者內容類似,以下是H1.vue頁面內容:
{{ msg }}
修改router/index.js代碼,子路由的寫法是在原有的路由配置下加入children字段。
routes: [ { path: "/", name: "HelloWorld", component: HelloWorld, children: [{path: "/h1", name: "H1", component: H1},//子路由的七、單頁面多路由區域操作必須在HelloWorld.vue中出現 {path: "/h2", name: "H2", component: H2} ] } ]
在一個頁面里我們有兩個以上
1.App.vue文件,在
2.需要在路由里配置這三個區域,配置主要是在components字段里進行
export default new Router({ routes: [ { path: "/", name: "HelloWorld", components: {default: HelloWorld, left:H1,//顯示H1組件內容"I am H1 page,Welcome to H1" right:H2//顯示H2組件內容"I am H2 page,Welcome to H2" } }, { path: "/h1", name: "H1", components: {default: HelloWorld, left:H2,//顯示H2組件內容 right:H1//顯示H1組件內容 } } ] })
上邊的代碼我們編寫了兩個路徑,一個是默認的‘/’,另一個是‘/Hi’.在兩個路徑下的components里面,我們對三個區域都定義了顯示內容。最后頁面展示如下圖:
八.$route 和 $router 的區別我們先將這兩者console.log打印出來:
$route 是“路由信息對象”,包括 path,params,hash,query,fullPath,matched,name 等路由信息參數。
① $route.path
字符串,對應當前路由的路徑,總是解析為絕對路徑,如 "/order"。
② $route.params
一個 key/value 對象,包含了 動態片段 和 全匹配片段,
如果沒有路由參數,就是一個空對象。
③ $route.query
一個 key/value 對象,表示 URL 查詢參數。
例如,對于路徑 /foo?user=1,則有 $route.query.user為1,
如果沒有查詢參數,則是個空對象。
④ $route.hash
當前路由的 hash 值 (不帶 #) ,如果沒有 hash 值,則為空字符串。
⑤ $route.fullPath
完成解析后的 URL,包含查詢參數和 hash 的完整路徑。
⑥ $route.matched
數組,包含當前匹配的路徑中所包含的所有片段所對應的配置參數對象。
⑦ $route.name 當前路徑名字
$router 是“路由實例”對象,即使用 new VueRouter創建的實例,包括了路由的跳轉方法,鉤子函數等。
$router常見跳轉方法:
.....
$router.push和$router.replace的區別:
使用push方法的跳轉會向 history 棧添加一個新的記錄,當我們點擊瀏覽器的返回按鈕時可以看到之前的頁面。
使用replace方法不會向 history 添加新記錄,而是替換掉當前的 history 記錄,即當replace跳轉到的網頁后,‘后退’按鈕不能查看之前的頁面。
九、 如何設置404頁面用戶會經常輸錯頁面,當用戶輸錯頁面時,我們希望給他一個友好的提示頁面,這個頁面就是我們常說的404頁面。vue-router也為我們提供了這樣的機制。
設置我們的路由配置文件(/src/router/index.js)
{ path:"*", component:Error }
這里的path:"*"就是輸入地址不匹配時,自動顯示出Error.vue的文件內容
在/src/components/文件夾下新建一個Error.vue的文件。簡單輸入一些有關錯誤頁面的內容。
{{ msg }}
此時我們隨意輸入一個錯誤的地址時,便會自動跳轉到404頁面
參考文章vue-router實現單頁面路由原理
Vue.js——vue-router 60分鐘快速入門
技術胖的Vue-router視頻教程
vue中$router以及$route的使用
Vue2.0 探索之路——vue-router入門教程和總結
vue-router 2.0一些區別
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/53225.html
摘要:路由模塊的本質就是建立起和頁面之間的映射關系。這時候我們可以直接利用傳值了使用來匹配路由,然后通過來傳遞參數跳轉對應路由配置于是我們可以獲取參數六配置子路由二級路由實際生活中的應用界面,通常由多層嵌套的組件組合而成。 一、前言 要學習vue-router就要先知道這里的路由是什么?為什么我們不能像原來一樣直接用標簽編寫鏈接哪?vue-router如何使用?常見路由操作有哪些?等等這些問...
摘要:路由模塊的本質就是建立起和頁面之間的映射關系。這時候我們可以直接利用傳值了使用來匹配路由,然后通過來傳遞參數跳轉對應路由配置于是我們可以獲取參數六配置子路由二級路由實際生活中的應用界面,通常由多層嵌套的組件組合而成。 一、前言 要學習vue-router就要先知道這里的路由是什么?為什么我們不能像原來一樣直接用標簽編寫鏈接哪?vue-router如何使用?常見路由操作有哪些?等等這些問...
摘要:技術路線的選擇技術學習內容匯總技術路線的選擇項目的技術路線是使用構建一套前端應用,更加具體的技術路線實際上是,應用到了技術棧加上了最新版的。不管怎么說,以這次項目對的使用體驗挺好。本次項目沒有使用開源的要求,自然是最好的選擇。 寫這篇總結的意義:總結,回顧,反思項目進行過程和這套Vue + ArcGIS API for JavaScriptGIS前端應用技術路線,從項目與技術兩個方面積...
摘要:分享一個比較完整的項目供大家交流學習,這個項目的英文簡介項目地址在線演示翻譯過來呢就是一個涉及面較廣的使用豆瓣作為數據源的。 分享一個比較完整的Vue2+項目供大家交流學習,這個項目的英文簡介:Awesome douban DEMO created with Vue2.x + Vuex + Vue-router + vue-resource 項目地址:https://github.co...
摘要:前言一個包含的簡單,從第一個開始,依次深入學習,即可快速上手強大的。 前言 一個包含 vue-router的簡單demos,從第一個demo開始,依次深入學習,即可快速上手強大的vue-router。 如何使用 安裝模塊pure 或 http-server來啟動服務器npm install -g puer or npm install -g http-server 克隆倉庫 啟動服...
閱讀 2864·2021-09-22 15:43
閱讀 4781·2021-09-06 15:02
閱讀 854·2019-08-29 13:55
閱讀 1687·2019-08-29 12:58
閱讀 3074·2019-08-29 12:38
閱讀 1257·2019-08-26 12:20
閱讀 2272·2019-08-26 12:12
閱讀 3321·2019-08-23 18:35