国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue-Router的使用方法

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

使用 Vue.js 做項目的時候,一個頁面是由多個組件構成的,所以在跳轉頁面的時候,并不適合用傳統的 href,于是 vue-router 應運而生。

路由,其實就是指向的意思,當我點擊頁面上的home按鈕時,頁面中就要顯示home的內容,如果點擊頁面上的about 按鈕,頁面中就要顯示about 的內容。Home按鈕  => home 內容, about按鈕 => about 內容,也可以說是一種映射. 所以在頁面上有兩個部分,一個是點擊部分,一個是點擊之后,顯示內容的部分。

點擊之后,怎么做到正確的對應,比如,我點擊home 按鈕,頁面中怎么就正好能顯示home的內容。這就要在js 文件中配置路由。

官方文檔: https://router.vuejs.org/zh-cn/essentials/getting-started.html

Vue-Router的最簡單使用

1.先注冊路由

2.將路由注冊到VM組件中

3.定義組件

4.頁面定義跳轉路徑

<!DOCTYPE html><html>  <head>    <meta charset="UTF-8">    <title></title>    <script src="lib/vue.min.js"></script>    <script src="lib/vue-router-3.0.1.js"></script>    <style type="text/css">    </style>  </head>  <body>        <div id="app">      <!--        由于Vue-router的hash匹配原則所以我們需要在原定義的路徑上加一個#號      -->      <a href="#/login" rel="external nofollow" rel="external nofollow" >登錄</a>      <a href="#/register" rel="external nofollow" rel="external nofollow" >注冊</a>      <router-view></router-view>    </div>  </body>  <script>    var login={      template:'<h1>登錄組件</h1>'    }    var register={      template:'<h1>注冊組件</h1>'    }    var routerObj = new VueRouter({      routes:[      //此處的component只能使用組件對象,而不能使用注冊的模板的名稱        {path:"/login",component:login},        {path:"/register",component:register}      ]    })    var vm = new Vue({      el:'#app',      data:{      },      methods:{              },      router:routerObj//將路由規則對象注冊到VM實例上    })  </script></html>

使用Router-Link替代a標簽

這么做主要是為了去掉a標簽中的為了匹配hash地址的“#”,如下

<!DOCTYPE html><html>  <head>    <meta charset="UTF-8">    <title></title>    <script src="lib/vue.min.js"></script>    <script src="lib/vue-router-3.0.1.js"></script>    <style type="text/css">    </style>  </head>  <body>        <div id="app">      <!--        由于Vue-router的hash匹配原則所以我們需要在原定義的路徑上加一個#號      --><!--      <a href="#/login" rel="external nofollow" rel="external nofollow" >登錄</a>      <a href="#/register" rel="external nofollow" rel="external nofollow" >注冊</a>-->      <router-link to="/login" tag="span">登錄</router-link>      <router-link to="/register">注冊</router-link>      <router-view></router-view>    </div>  </body>  <script>    var login={      template:'<h1>登錄組件</h1>'    }    var register={      template:'<h1>注冊組件</h1>'    }    var routerObj = new VueRouter({      routes:[      //此處的component只能使用組件對象,而不能使用注冊的模板的名稱        {path:"/login",component:login},        {path:"/register",component:register}      ]    })    var vm = new Vue({      el:'#app',      data:{      },      methods:{              },      router:routerObj//將路由規則對象注冊到VM實例上    })  </script></html>

同時,我們還可以利用tag標簽來渲染router-link元素,router-link默認渲染為a鏈接元素,使用tag標簽可以渲染其他元素,上述代碼中渲染為span元素了。無論渲染成什么元素,都依然與a連接一樣擁有跳轉的點擊事件

重定向技術以及默認路徑

默認路徑

我們可以使用默認路徑的方式指定根路徑,只需要在上述路由定義的方式中加入默認路徑即可

    var routerObj = new VueRouter({      routes:[      //此處的component只能使用組件對象,而不能使用注冊的模板的名稱        {path:"/",component:login},        {path:"/login",component:login},        {path:"/register",component:register}      ]    })

重定向方式指定默認路徑

同樣的使用一行代碼即可直接重定向到login路徑下,相比上述的默認路徑,此方式在url的展示上更為明顯

    var routerObj = new VueRouter({      routes:[      //此處的component只能使用組件對象,而不能使用注冊的模板的名稱        {path:"/",redirect:"/login"},        {path:"/login",component:login},        {path:"/register",component:register}      ]    })

路由選中之后高亮設置

使用默認類設置為高亮

Vue為router-link內置了一個連接點擊之后高亮的類router-link-active,即可以在自己的style中設置

 

    <style type="text/css">      .router-link-active{        color: red;        font-weight: 800;        font-style: italic;        font-size: 30px;      }    </style>

使用自定義類名

當我們想使用第三方定義的選中樣式,或者是自己想定義更為簡潔的樣式,可以使用linkActiveClass來定義,即在路由初始化時指定類名,在指定樣式時再自定義樣式

    var routerObj = new VueRouter({      routes:[      //此處的component只能使用組件對象,而不能使用注冊的模板的名稱        {path:"/",redirect:"/login"},        {path:"/login",component:login},        {path:"/register",component:register}      ],      linkActiveClass:'myactive'    })

指定樣式

    <style type="text/css">      .router-link-active,.myactive{        color: red;        font-weight: 800;        font-style: italic;        font-size: 30px;      }    </style>

路由傳參

使用query方式傳遞參數

首先我們再設置路由鏈接是指定參數

<router-link to="/login?id=10&name=zhao">登錄</router-link>

且可以指定并獲取多個參數,主要是再定義的組件對象內部使用created方法來獲得

    var login={      template:'<h1>登錄組件---{{$route.query.id}}--{{$route.query.name}}</h1>',      created(){        console.log(this.$route.query.id)      }    }

使用params方式傳遞參數

首先我們在路由定義的時候采用:定義params參數

    var routerObj = new VueRouter({      routes:[      //此處的component只能使用組件對象,而不能使用注冊的模板的名稱        {path:"/login/:id/:name",component:login},        {path:"/register",component:register}      ],    })

在實際使用過程中如何傳遞

   <router-link to="/login/10/zhao">登錄</router-link>      <router-link to="/register">注冊</router-link>      <router-view></router-view>

在組件中使用

    var login={      template:'<h1>登錄組件---{{$route.params.id}}</h1>',      created(){        console.log(this.$route.params.id)      }    }

路由嵌套的實現

<!DOCTYPE html><html>  <head>    <meta charset="UTF-8">    <title></title>    <script src="lib/vue-2.4.0.js"></script>    <script src="lib/vue-router-3.0.1.js"></script>    <style type="text/css">    </style>  </head>  <body> <div id="app">  <router-link to="/account">Account</router-link>  <router-view></router-view> </div> <template id="tmpl">  <div>   <h1>這是 Account 組件</h1>   <router-link to="/account/login">登錄</router-link>   <router-link to="/account/register">注冊</router-link>   <router-view></router-view>  </div> </template> <script>  // 組件的模板對象  var account = {   template: '#tmpl'  }  var login = {   template: '<h3>登錄</h3>'  }  var register = {   template: '<h3>注冊</h3>'  }  var router = new VueRouter({   routes: [    {     path: '/account',     component: account,     // 使用 children 屬性,實現子路由,同時,子路由的 path 前面,不要帶 / ,否則永遠以根路徑開始請求,這樣不方便我們用戶去理解URL地址     children: [      { path: 'login', component: login },      { path: 'register', component: register }     ]    }}   ]  })  // 創建 Vue 實例,得到 ViewModel  var vm = new Vue({   el: '#app',   data: {},   methods: {},   router  }); </script></body></html>

主要是由children屬性來實現的,上述代碼中由三個易錯點

1.定義路由時,子路由沒有‘/'

2.在父組件中定義子組件要寫子組件的全路徑

3.在父組件中定義組件同樣要加入router-view元素

案例:路由命名視圖實現經典布局

命名視圖在定義路由時使用components屬性(注意不是component)來定義:

    var routerObj = new VueRouter({      routes:[      //此處的component只能使用組件對象,而不能使用注冊的模板的名稱        {path:"/",components:{          default:header,          left:leftBox,          main:mainBox        }},      ]    })

幾個組件分別定義如下

    var header={      template:'<h1 class="header">頭部區域</h1>'    }    var leftBox={      template:'<h1 class=left>左部菜單區域</h1>'    }    var mainBox={      template:'<h1 class="main">主體內容區域</h1>'    }

我們在頁面上使用上述命名視圖時使用router-view的name屬性來定義

    <div id="app">      <router-view></router-view>      <div id="container">        <router-view name="left"></router-view>        <router-view name="main"></router-view>      </div>    </div>

未使用命名屬t性name設置視圖組件的將采用default命名視圖

設置一下樣式

  <style type="text/css">    html,body{      margin: 0;      padding: 0;    }    h1{      margin: 0;      padding: 0;      font-size: 16px;    }    .header{      background-color: #6495ED;      height: 200px;    }        #container{      display: flex;      height: 600px;    }    .left{      flex: 2;      background-color: #0000FF;    }    .main{      flex: 8;      background-color: #8A2BE2;    }  </style>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 射洪县| 兴文县| 钟祥市| 合江县| 四川省| 高要市| 广灵县| 五河县| 襄樊市| 周口市| 长乐市| 南京市| 商水县| 平昌县| 七台河市| 霍林郭勒市| 侯马市| 万宁市| 嘉义县| 故城县| 景德镇市| 东乡| 黄冈市| 新宁县| 确山县| 健康| 南涧| 陇南市| 宜城市| 陆丰市| 台安县| 保定市| 广西| 中江县| 吉木萨尔县| 岑溪市| 沂源县| 虹口区| 澜沧| 连平县| 沛县|