一、路由的传参
1、传参的第一种方式
<div id="app">
<!--如果在路由中,使用查询字符串,给路由传递参数,则不需要修改路由规则的path属性-->
<router-link to="/login?id=10&name=zs">登录</router-link>
<router-link to="/register">注册</router-link>
<router-view></router-view>
</div>
<script>
var login = {
template: '<h1>登录 --- {{$route.query.id}} --- {{$route.query.name}}</h1>',
created() { //组件的生命周期钩子函数
console.log(this.$route);
}
};
var register = {
template: '<h1>注册</h1>'
};
var router = new VueRouter({
routes: [
{path: '/', redirect: {path: '/login', query: {id: 10, name: "zs"}}},
{path: '/login', component: login},
{path: '/register', component: register},
]
});
var vm = new Vue({
el: '#app',
data: {},
methods: {},
router: router
})
</script>
2、传参的第二种方式
<div id="app">
<!--如果在路由中,使用查询字符串,给路由传递参数,则不需要修改路由规则的path属性-->
<router-link to="/login/10">登录</router-link>
<router-link to="/register">注册</router-link>
<router-view></router-view>
</div>
<script>
var login = {
template: '<h1>登录</h1>',
created() { //组件的生命周期钩子函数
console.log(this.$route.params);
}
};
var register = {
template: '<h1>注册</h1>'
};
var router = new VueRouter({
routes: [
{path: '/', redirect: '/login/:id'},
{path: '/login/:id', component: login},
{path: '/register', component: register},
]
});
var vm = new Vue({
el: '#app',
data: {},
methods: {},
router: router
})
</script>
二、路由的嵌套
<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>
</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: [
{
//使用children属性,实现子路由,path不需要加/
path: 'login',
component: login
},
{
path: 'register',
component: register
}
]
},
]
});
var vm = new Vue({
el: '#app',
data: {},
methods: {},
router,
})
</script>
三、路由-命名视图实现经典布局
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="lib/vue-2.6.10.js"></script>
<script src="lib/vue-router.js"></script>
<style>
html, body {
margin: 0;
padding: 0;
}
.header {
background-color: orange;
height: 80px;
}
.container {
display: flex;
height: 600px;
}
.left {
background-color: lightgreen;
flex: 2;
}
.main {
background-color: lightpink;
flex: 10;
}
h1 {
margin: 0;
padding: 0;
font-size: 16px;
}
</style>
</head>
<body>
<div id="app">
<router-view></router-view>
<div class="container">
<router-view name="left"></router-view>
<router-view name="main"></router-view>
</div>
</div>
<script>
var header = {
template: '<h1 class="header">Header头部区域</h1>'
};
var leftBox = {
template: '<h1 class="left">Left侧边栏区域</h1>'
};
var mainBox = {
template: '<h1 class="main">mainBox主体区域</h1>'
};
//创建路由对象
var router = new VueRouter({
routes: [
{
path: '/',
components: {
'default': header,
'left': leftBox,
'main': mainBox,
}
}
]
});
var vm = new Vue({
el: '#app',
data: {},
methods: {},
router
})
</script>
</body>
</html>