1、VueRouter的安装
1.1、https://unpkg.com/vue-router/dist/vue-router.js下载安装。
1.2、<script src="./static/vue-router.js"></script>
2、VueRouter的使用
我们在使用Vue中的属性十,都可以通过$属性名拿到它所对应的对象
$route 拿到的是一个object对象,里边有所有的信息
$router 拿到的是一个VueRouter实例化的对象,里边有VueRouter的所有方法。
<script>
// 1. 在Vue根实例中使用,VueRouter
Vue.use(VueRouter);
let Home = {
template: `
<div>
<h1>这是主页页面</h1>
</div>
`
};
let Login = {
template: `
<div>
<h1>这是登录页面</h1>
</div>
`
};
let Register = {
template: `
<div>
<h1>这是注册页面</h1>
</div>
`
};
let App = {
// 第四步
// router-link会渲染成a标签,to会变成href属性,to后面是router中定义的路径
// 第五步
// router-view是页面内容的渲染出口
template: `
<div>
<router-link to="/">首页</router-link>
<router-link to="/login">登录</router-link>
<router-link to="/register">注册</router-link>
<router-view></router-view>
</div>
`,
};
// 2. 第二步实例化一个router对象
// 本质上是将路径和页面内容绑定了对应关系
let router = new VueRouter({
routes: [
{
path: '/',
component: Home,
},
{
path: '/login',
component: Login,
},
{
path: '/register',
component: Register,
}
]
});
new Vue({
el: "#app",
template: `<App/>`,
// 第三步,在根实例中注册router对象
router: router, # 固定写法router
components: {
App,
}
});
</script>
3、VueRouter的路由命名
template: ` <div> <router-link :to="{ name: 'home' }">首页</router-link> <router-link :to="{ name: 'login' }">登录</router-link> <router-link :to="{ name: 'register' }">注册</router-link> <router-view></router-view> </div> `, }; # 在router-link中进行命名 :to='{name:'xx'}'
let router = new VueRouter({
routes: [
{
name: 'home',
path: '/',
component: Home,
},
{
name: 'login',
path: '/login',
component: Login,
},
{
name: 'register',
path: '/register',
component: Register,
}
]
});
4、VueRouter之参数
template: ` <div> <router-link :to="{ name: 'home'}">首页</router-link> <router-link :to="{ name: 'userParams', params: { userId: 1} }">登录</router-link> <router-link :to="{ name: 'userQuery', query: { userId: 2 } }">注册</router-link> <router-view></router-view> </div> `, }; // 2. 第二步实例化一个router对象 // 本质上是将路径和页面内容绑定了对应关系 let router = new VueRouter({ routes: [ { name: 'home', path: '/', component: Home, }, { // xxx/1 如果参数是这种样式,在template中使用params:{userId:1} name: 'userParams', path: '/user/:userId', component: userParams, }, { // xxx/?userId=1 如果参数是带?xx=xx的形式,在template中使用query:{userId:2} name: 'userQuery', path: '/user', component: userQuery, } ] });
5、VueRouter之子路由
let router = new VueRouter({ routes: [ { name: 'home', path: '/', component: Home, }, { name: 'courses', path: '/courses', component: Courses, children: [ # 创一个children的数组,里边包含的是子路由的内容 { path: 'lightcourses', component: LightCourses }, { path: 'degreecourses', component: DegreeCourses }, ] }, ] });
6、VueRouter之子路由append (将子路由路径拼接到父级路由后边)
<script> Vue.use(VueRouter); let Home = { template: ` <div> <h1>这是首页页面</h1> </div> ` }; let Courses = { template: ` <div> <h1>这是课程页面</h1> <router-link to="lightcourses" append>轻课</router-link> # 在注册的课程标签下的两个子路由的a标签中 加入append,就可以将路径拼接到父级路由后边 <router-link to="degreecourses" append>学位课</router-link> <router-view></router-view> </div> ` }; let LightCourses = { template: ` <div> <h1>这是轻课页面</h1> </div> ` }; let DegreeCourses = { template: ` <div> <h1>这是学位课程页面</h1> </div> ` }; let App = { template: ` <div> <router-link :to="{ name: 'home' }" >首页</router-link> <router-link :to="{ name: 'courses'} " >课程页面</router-link> <router-view></router-view> </div> ` }; let router = new VueRouter({ routes: [ { name: 'home', path: '/', component: Home, }, { name: 'courses', path: '/courses', component: Courses, children: [ # chlidren 是子路由与父级路由的关系 { path: 'lightcourses', component: LightCourses }, { path: 'degreecourses', component: DegreeCourses }, ] }, ] }); new Vue({ el: "#app", template: `<App/>`, components: { App, }, router: router, }) </script>
不写append:

写append:

7、VueRouter之重定向(redirect)
let router = new VueRouter({ routes: [ { name: 'home', path: '/', component: Home, }, { name: 'login', path: '/login', component: Login }, { name: 'pay', path: '/pay', redirect: '/login', # 哪里需要重定向直接加一个redirect:'/路径' component: Pay, }, ] });
8、VueRouter之钩子函数
<script>
// 1. 使用VueRouter
Vue.use(VueRouter);
let Home = {
template: `
<div>
<h1>这是首页页面</h1>
</div>
`
};
let Login = {
template: `
<div>
<h1>这是登录页面</h1>
</div>
`
};
let Pay = {
template: `
<div>
<h1>这是支付页面</h1>
</div>
`
};
let App = {
// router-link会渲染成a标签,to会渲染成href
// router-view是内容的渲染出口
template: `
<div>
<router-link :to="{ name: 'home' }">首页</router-link>
<router-link :to="{ name: 'login' }">登录</router-link>
<router-link :to="{ name: 'pay' }">支付</router-link>
<router-view></router-view>
</div>
`
};
// 2. 创建一个router对象
// 把a标签的锚点值和页面内容绑定了对应关系
let router = new VueRouter({
routes: [ # 固定写法routes:[数组]
{
name: 'home',
path: '/',
component: Home,
},
{
name: 'login',
path: '/login',
component: Login
},
{
name: 'pay',
path: '/pay',
meta: { required_login: true }, # 固定写法用meta:{自定义变量名:true}
component: Pay,
},
]
});
// 通过router对象的beforeEach(function(to, from, next))
router.beforeEach(function (to, from, next) { # 三个参数:to 表示路由要访问的目的路径
console.log("to: ", to); from 表示从哪个路径访问跳转过来的,比如从登陆界面访问支付界面,from就是登陆界面的路径,to 就是支付的路径
console.log("from: ", from); next 表示接下来要去哪儿 ,next()如果里边没有参数,就表示接下来正常执行。
console.log("next: ", next);
if ( to.meta.required_login ) {
next('/login');
} else {
next();
}
});
new Vue({
el: "#app",
template: `<App/>`,
components: {
App,
},
// 在根实例中注册router对象
router: router,
})
</script>
9、VuRouter之去掉中间的那些多余的参数

let router = new VueRouter({ mode: 'history', # 只需要在router对象中加一个mode:'history',就可以去掉多余的参数,效果如下 routes: [ { name: 'home', path: '/', component: Home, }, { name: 'login', path: '/login', component: Login }, { name: 'pay', path: '/pay', meta: { required_login: true }, component: Pay, }, ] });
