亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

關于vue-router的那些事兒

2019-11-19 13:47:33
字體:
來源:轉載
供稿:網友

一、引子

要學習vue-router就要先知道這里的路由是什么?為什么我們不能像原來一樣直接用標簽編寫鏈接哪?vue-router如何使用?常見路由操作有哪些?等等這些問題,就是本篇要探討的主要問題

二、vue-router是什么

這里的路由并不是指我們平時所說的硬件路由器, 這里的路由就是SPA(單頁應用)的路徑管理器 。再通俗的說,vue-router就是WebApp的鏈接路徑管理系統。 vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,適合用于構建單頁面應用。vue的單頁面應用是基于路由和組件的,路由用于設定訪問路徑,并將路徑和組件映射起來。傳統的頁面應用,是用一些超鏈接來實現頁面切換和跳轉的。在vue-router單頁面應用中,則是路徑之間的切換,也就是組件的切換。 路由模塊的本質 就是建立起url和頁面之間的映射關系 。 至于我們為啥不能用a標簽,這是因為用Vue做的都是單頁應用,就相當于只有一個主的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 的錨點,代表的是網頁中的一個位置,單單改變#后的部分,瀏覽器只會滾動到相應位置,不會重新加載網頁,也就是說 #是用來指導瀏覽器動作的,對服務器端完全無用,HTTP請求中也不會不包括#;同時每一次改變#后的部分,都會在瀏覽器的訪問歷史中增加一個記錄,使用”后退”按鈕,就可以回到上一個位置;所以說 Hash模式通過錨點值的改變,根據不同的值,渲染指定DOM位置的不同數據

2、History模式:

由于hash模式會在url中自帶#,如果不想要很丑的 hash,我們可以用路由的 history 模式,只需要在配置路由規則時,加入"mode: 'history'",這種模式充分利用 history.pushState API 來完成 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: <router-link to="路由地址"></router-link>

四、vue-router使用方式

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中留坑 <router-view></router-view>

具體實現請看如下代碼:

//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中<template>  <div>    <!-- 留坑,非常重要 -->    <router-view></router-view>  </div></template><script>  export default {    data(){      return {}    }  }</script>

五、vue-router核心要點

1.vue-router如何參數傳遞

①用name傳遞參數

在路由文件src/router/index.js里配置name屬性

routes: [  {   path: '/',   name: 'Hello',   component: Hello  }]

模板里(src/App.vue)用 $router.name 來接收 比如: <p>{{ $router.name}}</p>

②通過 <router-link> 標簽中的to傳參

這種傳參方法的基本語法:

<router-link :to="{name:xxx,params:{key:value}}">valueString</router-link>

比如先在src/App.vue文件中

<router-link :to="{name:'hi1',params:{username:'jspang',id:'555'}}">Hi頁面1</router-link>

然后把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}}

③vue-router 利用url傳遞參數----在配置文件里以冒號的形式設置參數。

我們在/src/router/index.js文件里配置路由

{  path:'/params/:newsId/:newsTitle',  component:Params}

我們需要傳遞參數是新聞ID(newsId)和新聞標題(newsTitle).所以我們在路由配置文件里制定了這兩個值。 在src/components目錄下建立我們params.vue組件,也可以說是頁面。我們在頁面里輸出了url傳遞的的新聞ID和新聞標題。

<template>  <div>    <h2>{{ msg }}</h2>    <p>新聞ID:{{ $route.params.newsId}}</p>    <p>新聞標題:{{ $route.params.newsTitle}}</p>  </div></template><script>export default { name: 'params', data () {  return {   msg: 'params page'  } }}</script>

在App.vue文件里加入我們的 <router-view> 標簽。這時候我們可以直接利用url傳值了

<router-link to="/params/198/jspang website is very good">params</router-link>

2.單頁面多路由區域操作

在一個頁面里我們有2個以上 <router-view> 區域,我們通過配置路由的js文件,來操作這些區域的內容

①App.vue文件,在 <router-view> 下面新寫了兩行 <router-view> 標簽,并加入了些CSS樣式

<template> <div id="app">  <img src="./assets/logo.png">    <router-link :to="{name:'HelloWorld'}"><h1>H1</h1></router-link>    <router-link :to="{name:'H1'}"><h1>H2</h1></router-link>  <router-view></router-view>  <router-view name="left" style="float:left;width:50%;background-color:#ccc;height:300px;"/>  <router-view name="right" style="float:right;width:50%;background-color:yellowgreen;height:300px;"/> </div></template>

②需要在路由里配置這三個區域,配置主要是在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里面,我們對三個區域都定義了顯示內容。最后頁面展示如下圖:

 

3.vue-router配置子路由(二級路由)

實際生活中的應用界面,通常由多層嵌套的組件組合而成。同樣地,URL中各段動態路徑也按某種結構對應嵌套的各層組件,例如:

 

如何實現下圖效果(H1頁面和H2頁面嵌套在主頁中)?

 

①首先用標簽增加了兩個新的導航鏈接

<router-link :to="{name:'HelloWorld'}">主頁</router-link><router-link :to="{name:'H1'}">H1頁面</router-link><router-link :to="{name:'H2'}">H2頁面</router-link>

②在HelloWorld.vue加入 <router-view> 標簽,給子模板提供插入位置

<template> <div class="hello">  <h1>{{ msg }}</h1>  <router-view></router-view> </div></template>

③在components目錄下新建兩個組件模板 H1.vue 和 H2.vue 兩者內容類似,以下是H1.vue頁面內容:

<template> <div class="hello">  <h1>{{ msg }}</h1> </div></template><script> export default {  data() {   return {    msg: 'I am H1 page,Welcome to H1'   }  } }</script>

④修改router/index.js代碼,子路由的寫法是在原有的路由配置下加入children字段。

routes: [  {   path: '/',   name: 'HelloWorld',   component: HelloWorld,   children: [{path: '/h1', name: 'H1', component: H1},    {path: '/h2', name: 'H2', component: H2}   ]  } ]

4.vue-router跳轉方法

<button @click="goToMenu" class="btn btn-success">Let's order!</button>.....<script> export default{  methods:{   goToMenu(){    this.$router.go(-1)//跳轉到上一次瀏覽的頁面    this.$router.replace('/menu')//指定跳轉的地址    this.$router.replace({name:'menuLink'})// 指定跳轉路由的名字下    this.$router.push('/menu')通過push進行跳轉    this.$router.push({name:'menuLink'})通過push進行跳轉路由的名字下   }  } }</script>

5.404頁面的設置

用戶會經常輸錯頁面,當用戶輸錯頁面時,我們希望給他一個友好的提示頁面,這個頁面就是我們常說的404頁面。vue-router也為我們提供了這樣的機制。 ①設置我們的路由配置文件(/src/router/index.js)

{  path:'*',  component:Error}

這里的path:'*'就是輸入地址不匹配時,自動顯示出Error.vue的文件內容

②在/src/components/文件夾下新建一個Error.vue的文件。簡單輸入一些有關錯誤頁面的內容。

<template>  <div>    <h2>{{ msg }}</h2>  </div></template><script>export default { data () {  return {   msg: 'Error:404'  } }}</script>

此時我們隨意輸入一個錯誤的地址時,便會自動跳轉到404頁面

總結

以上所述是小編給大家介紹的關于vue-router的那些事兒,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品一区二区在线| 欧美激情奇米色| 亚洲少妇激情视频| 欧美俄罗斯性视频| 国产98色在线| 亚洲国产欧美一区二区三区同亚洲| 久久综合久久八八| 国产精品96久久久久久| 成人性生交大片免费看视频直播| 欧美老女人在线视频| 色香阁99久久精品久久久| 狠狠躁夜夜躁人人躁婷婷91| 日韩av123| 国产成人高清激情视频在线观看| 大伊人狠狠躁夜夜躁av一区| 8x海外华人永久免费日韩内陆视频| 久久在线观看视频| 91精品久久久久久久久久另类| 欧美大荫蒂xxx| 欧美丰满少妇xxxxx| 亚洲天堂精品在线| 国产欧美日韩免费看aⅴ视频| 久久国产精品久久国产精品| 欧美最猛性xxxxx(亚洲精品)| 国内外成人免费激情在线视频| 日韩欧美主播在线| 高潮白浆女日韩av免费看| 国产精品高精视频免费| 91av在线播放视频| 日韩一区二区精品视频| 欧美午夜精品在线| 亚洲一区亚洲二区亚洲三区| 亚洲香蕉在线观看| 午夜免费日韩视频| 在线日韩欧美视频| 久久久久国产精品免费| 色琪琪综合男人的天堂aⅴ视频| 久久国产精品99国产精| 7m精品福利视频导航| 日本精品一区二区三区在线播放视频| 日韩电影免费观看中文字幕| 亚洲最大成人在线| 伊人久久久久久久久久久| 91麻豆桃色免费看| 亚洲韩国欧洲国产日产av| 日韩欧美aⅴ综合网站发布| 91精品视频免费观看| 九九精品在线观看| 日韩av综合网站| 91免费高清视频| 成人激情视频网| 国产成人精品综合| 97av视频在线| 久久久久久久久国产精品| 国产噜噜噜噜久久久久久久久| 欧美激情一二区| 人妖精品videosex性欧美| 欧美视频在线观看免费网址| 色婷婷综合成人| 久久躁狠狠躁夜夜爽| 国产精品欧美一区二区| 国产精品天天狠天天看| 国产成人aa精品一区在线播放| 亚洲成人亚洲激情| 538国产精品一区二区免费视频| 亚洲欧美在线x视频| 亚洲一区亚洲二区亚洲三区| 欧美日韩国产精品专区| 久久视频国产精品免费视频在线| 国产精品中文字幕在线观看| 亚洲欧洲日产国码av系列天堂| 国产在线精品成人一区二区三区| 成人久久精品视频| 色噜噜狠狠色综合网图区| 中文字幕欧美日韩| 国产91精品视频在线观看| 国产精品扒开腿做| 国产精品美乳一区二区免费| 成人一区二区电影| 欧美日韩亚洲精品内裤| 亚洲综合日韩在线| 亚洲精品视频播放| 亚洲欧美中文字幕在线一区| 97国产真实伦对白精彩视频8| 欧美激情高清视频| 57pao国产成人免费| 国产精品久久二区| 国产suv精品一区二区| 亚洲成成品网站| 日韩成人在线网站| 亚洲乱码国产乱码精品精| 亚洲片国产一区一级在线观看| 一区二区三区高清国产| 欧美视频中文字幕在线| 精品露脸国产偷人在视频| 国产亚洲一区二区精品| 国产免费一区二区三区在线观看| 国产一区二区香蕉| 欧美日韩亚洲成人| 久久久久中文字幕2018| 国产成人一区二区三区小说| 欧美色另类天堂2015| 亚洲最大的网站| 亚洲男人av电影| 成人在线视频福利| 性欧美长视频免费观看不卡| 中文欧美在线视频| 国产精品第10页| 国产精品一区专区欧美日韩| 欧美尤物巨大精品爽| 欧美在线亚洲一区| 国产一区二区在线播放| 久久精品国产视频| 久久综合亚洲社区| 国产suv精品一区二区三区88区| 欧美极品少妇xxxxⅹ裸体艺术| 91福利视频网| 久久99热精品这里久久精品| 亚洲欧美激情四射在线日| 热久久视久久精品18亚洲精品| 国产精品96久久久久久| 久久中文久久字幕| 91久久国产综合久久91精品网站| 精品久久久久久久大神国产| 91爱视频在线| 懂色av一区二区三区| 成人久久一区二区| 一区二区三区无码高清视频| 日韩在线观看视频免费| 亚洲第一网站免费视频| 亚洲精品国产综合区久久久久久久| 国产日韩欧美另类| 插插插亚洲综合网| 欧美黑人巨大精品一区二区| 亚洲性夜色噜噜噜7777| 日韩欧美在线看| 国产精品久久久久久久久久久新郎| 欧美性生交xxxxxdddd| 日本精品在线视频| 国产精品亚洲一区二区三区| 国内精品视频一区| 大伊人狠狠躁夜夜躁av一区| www高清在线视频日韩欧美| 精品伊人久久97| 亚洲自拍欧美色图| 精品一区二区三区电影| 国产精品久久久久久久久久99| 欧美黑人狂野猛交老妇| 亚洲老头同性xxxxx| 91成人在线观看国产| 久久免费视频在线| 亚洲一区二区三区在线免费观看| 成人精品视频在线| 国产精品久久久久久久久久新婚| 国产一区二中文字幕在线看| 91久久嫩草影院一区二区| 国产99久久精品一区二区 夜夜躁日日躁| 久久网福利资源网站| 国产精品久久国产精品99gif| 亚洲成人教育av| 亚洲永久在线观看| 久久久久久亚洲精品不卡| 欧美国产高跟鞋裸体秀xxxhd| 国产精品福利无圣光在线一区|