1.先註冊路由css
2.將路由註冊到VM組件中html
3.定義組件vue
4.頁面定義跳轉路徑vue-router
<!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">登陸</a> <a href="#/register">註冊</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>
這麼作主要是爲了去掉a標籤中的爲了匹配hash地址的「#」,以下app
<!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">登陸</a> <a href="#/register">註冊</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鏈接同樣擁有跳轉的點擊事件佈局
咱們可使用默認路徑的方式指定根路徑,只須要在上述路由定義的方式中加入默認路徑便可flex
var routerObj = new VueRouter({ routes:[ //此處的component只能使用組件對象,而不能使用註冊的模板的名稱 {path:"/",component:login}, {path:"/login",component:login}, {path:"/register",component:register} ] })
一樣的使用一行代碼便可直接重定向到login路徑下,相比上述的默認路徑,此方式在url的展現上更爲明顯this
var routerObj = new VueRouter({ routes:[ //此處的component只能使用組件對象,而不能使用註冊的模板的名稱 {path:"/",redirect:"/login"}, {path:"/login",component:login}, {path:"/register",component:register} ] })
Vue爲router-link內置了一個鏈接點擊以後高亮的類router-link-active,便可以在本身的style中設置url
<style type="text/css"> .router-link-active{ color: red; font-weight: 800; font-style: italic; font-size: 30px; } </style>
當咱們想使用第三方定義的選中樣式,或者是本身想定義更爲簡潔的樣式,可使用linkActiveClass來定義,即在路由初始化時指定類名,在指定樣式時再自定義樣式spa
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>
首先咱們再設置路由連接是指定參數
<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參數
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>