Vue-Router的使用方法
使用 Vue.js 做項(xiàng)目的時(shí)候,一個(gè)頁(yè)面是由多個(gè)組件構(gòu)成的,所以在跳轉(zhuǎn)頁(yè)面的時(shí)候,并不適合用傳統(tǒng)的 href,于是 vue-router 應(yīng)運(yùn)而生。
路由,其實(shí)就是指向的意思,當(dāng)我點(diǎn)擊頁(yè)面上的home按鈕時(shí),頁(yè)面中就要顯示home的內(nèi)容,如果點(diǎn)擊頁(yè)面上的about 按鈕,頁(yè)面中就要顯示about 的內(nèi)容。Home按鈕 => home 內(nèi)容, about按鈕 => about 內(nèi)容,也可以說(shuō)是一種映射. 所以在頁(yè)面上有兩個(gè)部分,一個(gè)是點(diǎn)擊部分,一個(gè)是點(diǎn)擊之后,顯示內(nèi)容的部分。
點(diǎn)擊之后,怎么做到正確的對(duì)應(yīng),比如,我點(diǎn)擊home 按鈕,頁(yè)面中怎么就正好能顯示home的內(nèi)容。這就要在js 文件中配置路由。
官方文檔: https://router.vuejs.org/zh-cn/essentials/getting-started.html
Vue-Router的最簡(jiǎn)單使用
1.先注冊(cè)路由
2.將路由注冊(cè)到VM組件中
3.定義組件
4.頁(yè)面定義跳轉(zhuǎn)路徑
<!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匹配原則所以我們需要在原定義的路徑上加一個(gè)#號(hào)
-->
<a href="#/login" rel="external nofollow" rel="external nofollow" >登錄</a>
<a href="#/register" rel="external nofollow" rel="external nofollow" >注冊(cè)</a>
<router-view></router-view>
</div>
</body>
<script>
var login={
template:'<h1>登錄組件</h1>'
}
var register={
template:'<h1>注冊(cè)組件</h1>'
}
var routerObj = new VueRouter({
routes:[
//此處的component只能使用組件對(duì)象,而不能使用注冊(cè)的模板的名稱(chēng)
{path:"/login",component:login},
{path:"/register",component:register}
]
})
var vm = new Vue({
el:'#app',
data:{
},
methods:{
},
router:routerObj//將路由規(guī)則對(duì)象注冊(cè)到VM實(shí)例上
})
</script>
</html>
使用Router-Link替代a標(biāo)簽
這么做主要是為了去掉a標(biāo)簽中的為了匹配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匹配原則所以我們需要在原定義的路徑上加一個(gè)#號(hào)
-->
<!-- <a href="#/login" rel="external nofollow" rel="external nofollow" >登錄</a>
<a href="#/register" rel="external nofollow" rel="external nofollow" >注冊(cè)</a>-->
<router-link to="/login" tag="span">登錄</router-link>
<router-link to="/register">注冊(cè)</router-link>
<router-view></router-view>
</div>
</body>
<script>
var login={
template:'<h1>登錄組件</h1>'
}
var register={
template:'<h1>注冊(cè)組件</h1>'
}
var routerObj = new VueRouter({
routes:[
//此處的component只能使用組件對(duì)象,而不能使用注冊(cè)的模板的名稱(chēng)
{path:"/login",component:login},
{path:"/register",component:register}
]
})
var vm = new Vue({
el:'#app',
data:{
},
methods:{
},
router:routerObj//將路由規(guī)則對(duì)象注冊(cè)到VM實(shí)例上
})
</script>
</html>
同時(shí),我們還可以利用tag標(biāo)簽來(lái)渲染router-link元素,router-link默認(rèn)渲染為a鏈接元素,使用tag標(biāo)簽可以渲染其他元素,上述代碼中渲染為span元素了。無(wú)論渲染成什么元素,都依然與a連接一樣擁有跳轉(zhuǎn)的點(diǎn)擊事件
重定向技術(shù)以及默認(rèn)路徑
默認(rèn)路徑
我們可以使用默認(rèn)路徑的方式指定根路徑,只需要在上述路由定義的方式中加入默認(rèn)路徑即可
var routerObj = new VueRouter({
routes:[
//此處的component只能使用組件對(duì)象,而不能使用注冊(cè)的模板的名稱(chēng)
{path:"/",component:login},
{path:"/login",component:login},
{path:"/register",component:register}
]
})
重定向方式指定默認(rèn)路徑
同樣的使用一行代碼即可直接重定向到login路徑下,相比上述的默認(rèn)路徑,此方式在url的展示上更為明顯
var routerObj = new VueRouter({
routes:[
//此處的component只能使用組件對(duì)象,而不能使用注冊(cè)的模板的名稱(chēng)
{path:"/",redirect:"/login"},
{path:"/login",component:login},
{path:"/register",component:register}
]
})
路由選中之后高亮設(shè)置
使用默認(rèn)類(lèi)設(shè)置為高亮
Vue為router-link內(nèi)置了一個(gè)連接點(diǎn)擊之后高亮的類(lèi)router-link-active,即可以在自己的style中設(shè)置
<style type="text/css">
.router-link-active{
color: red;
font-weight: 800;
font-style: italic;
font-size: 30px;
}
</style>
使用自定義類(lèi)名
當(dāng)我們想使用第三方定義的選中樣式,或者是自己想定義更為簡(jiǎn)潔的樣式,可以使用linkActiveClass來(lái)定義,即在路由初始化時(shí)指定類(lèi)名,在指定樣式時(shí)再自定義樣式
var routerObj = new VueRouter({
routes:[
//此處的component只能使用組件對(duì)象,而不能使用注冊(cè)的模板的名稱(chēng)
{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方式傳遞參數(shù)
首先我們?cè)僭O(shè)置路由鏈接是指定參數(shù)
<router-link to="/login?id=10&name=zhao">登錄</router-link>
且可以指定并獲取多個(gè)參數(shù),主要是再定義的組件對(duì)象內(nèi)部使用created方法來(lái)獲得
var login={
template:'<h1>登錄組件---{{$route.query.id}}--{{$route.query.name}}</h1>',
created(){
console.log(this.$route.query.id)
}
}
使用params方式傳遞參數(shù)
首先我們?cè)诼酚啥x的時(shí)候采用:定義params參數(shù)
var routerObj = new VueRouter({
routes:[
//此處的component只能使用組件對(duì)象,而不能使用注冊(cè)的模板的名稱(chēng)
{path:"/login/:id/:name",component:login},
{path:"/register",component:register}
],
})
在實(shí)際使用過(guò)程中如何傳遞
<router-link to="/login/10/zhao">登錄</router-link>
<router-link to="/register">注冊(cè)</router-link>
<router-view></router-view>
在組件中使用
var login={
template:'<h1>登錄組件---{{$route.params.id}}</h1>',
created(){
console.log(this.$route.params.id)
}
}
路由嵌套的實(shí)現(xiàn)
<!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">注冊(cè)</router-link>
<router-view></router-view>
</div>
</template>
<script>
// 組件的模板對(duì)象
var account = {
template: '#tmpl'
}
var login = {
template: '<h3>登錄</h3>'
}
var register = {
template: '<h3>注冊(cè)</h3>'
}
var router = new VueRouter({
routes: [
{
path: '/account',
component: account,
// 使用 children 屬性,實(shí)現(xiàn)子路由,同時(shí),子路由的 path 前面,不要帶 / ,否則永遠(yuǎn)以根路徑開(kāi)始請(qǐng)求,這樣不方便我們用戶(hù)去理解URL地址
children: [
{ path: 'login', component: login },
{ path: 'register', component: register }
]
}
}
]
})
// 創(chuàng)建 Vue 實(shí)例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {},
methods: {},
router
});
</script>
</body>
</html>
主要是由children屬性來(lái)實(shí)現(xiàn)的,上述代碼中由三個(gè)易錯(cuò)點(diǎn)
1.定義路由時(shí),子路由沒(méi)有‘/'
2.在父組件中定義子組件要寫(xiě)子組件的全路徑
3.在父組件中定義組件同樣要加入router-view元素
案例:路由命名視圖實(shí)現(xiàn)經(jīng)典布局
命名視圖在定義路由時(shí)使用components屬性(注意不是component)來(lái)定義:
var routerObj = new VueRouter({
routes:[
//此處的component只能使用組件對(duì)象,而不能使用注冊(cè)的模板的名稱(chēng)
{path:"/",components:{
default:header,
left:leftBox,
main:mainBox
}},
]
})
幾個(gè)組件分別定義如下
var header={
template:'<h1 class="header">頭部區(qū)域</h1>'
}
var leftBox={
template:'<h1 class=left>左部菜單區(qū)域</h1>'
}
var mainBox={
template:'<h1 class="main">主體內(nèi)容區(qū)域</h1>'
}
我們?cè)陧?yè)面上使用上述命名視圖時(shí)使用router-view的name屬性來(lái)定義
<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設(shè)置視圖組件的將采用default命名視圖
設(shè)置一下樣式
<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>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Vue-router的使用和出現(xiàn)空白頁(yè),路由對(duì)象屬性詳解
- vue升級(jí)之路之vue-router的使用教程
- 使用vue-router完成簡(jiǎn)單導(dǎo)航功能【推薦】
- vue腳手架及vue-router基本使用
- 使用vue-router設(shè)置每個(gè)頁(yè)面的title方法
- 使用Vue-Router 2實(shí)現(xiàn)路由功能實(shí)例詳解
- vue-router 導(dǎo)航鉤子的具體使用方法
- Vue學(xué)習(xí)筆記進(jìn)階篇之vue-router安裝及使用方法
- 詳解vue-router基本使用
- Vue.js路由vue-router使用方法詳解
相關(guān)文章
Vue?入口與?initGlobalAPI實(shí)例剖析
這篇文章主要為大家介紹了Vue?入口與?initGlobalAPI實(shí)例剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
如何在Vue3中正確使用ElementPlus,親測(cè)有效,避坑
這篇文章主要介紹了如何在Vue3中正確使用ElementPlus,親測(cè)有效,避坑!具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
vue使用Proxy實(shí)現(xiàn)雙向綁定的方法示例
這篇文章主要介紹了vue使用Proxy實(shí)現(xiàn)雙向綁定的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
Vue使用正則校驗(yàn)文本框?yàn)檎麛?shù)
這篇文章主要介紹了Vue使用正則校驗(yàn)文本框?yàn)檎麛?shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Vue頁(yè)面加載完成后如何自動(dòng)加載自定義函數(shù)
這篇文章主要介紹了Vue頁(yè)面加載完成后如何自動(dòng)加載自定義函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
elementui之el-table如何通過(guò)v-if控制按鈕顯示與隱藏
這篇文章主要介紹了elementui之el-table如何通過(guò)v-if控制按鈕顯示與隱藏問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11

