本文主要介绍Vue.js中路由的使用。简而言之,路由是对应关系。分为前端路由和后端路由,前端路由通过事件的监听获取指定的内容,后端路由通过网址获取指定的内容。首先,本文会介绍前端路由的基本使用(未利用vue-router),后续会介绍vue-router的具体使用。
基础案例主要通过hash地址变化的监听实现了简单的路由功能。
- html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- head>
-
- <body>
-
- <div id="app">
- <a href="#index">主页a>
- <a href="#technology">科技a>
- <a href="#finance">财经a>
- <a href="#sports">体育a>
-
- <component :is="showPart">component>
- div>
- <script src="./vue.min.js">script>
- <script>
- // 定义组件
- const index = {
- template: '
主页信息
' - };
- const technology = {
- template: '
科技信息
' - };
- const finance = {
- template: '
财经信息
' - };
- const sports = {
- template: '
体育信息
' - };
- const vm = new Vue({
- el: '#app',
- data() {
- return {
- showPart: 'index'
- }
- },
- components: {
- technology,
- finance,
- index,
- sports
- }
- })
- window.onhashchange = function() {
- vm.showPart = location.hash.slice(1);
- }
- script>
- body>
-
- html>
下面介绍vue-router的使用方法:
router-link会被渲染为a链接,to对应的是href属性,默认会在前面添加一个“#”.router-view为占位符,用于显示跳转后得到的内容。
- <div id="app">
- <router-link to="/tech">科技router-link>
- <router-link to="/sports">体育router-link>
- <router-view>
- div>
组件中通过template定义显示的内容
- let tech = {
- template: '
科技信息
' - };
- let sports = {
- template: `
-
-
体育信息
-
-
basketball -
volleyball -
-
- `
- };
- let b = {
- template: '
basketball
' - };
- let v = {
- template: '
volleyball
' - };
通过VueRouter创建实例化对象,利用routes可为不同组件设置指定的路径,同时可以利用重定向设置默认路径。注意:通过children可以添加子路由
- // 3.创建VueRounter实例化对象
- const selfRouter = new VueRouter({
- // redirect重定向,当访问的路径是“/”时,直接切换为“/tech路径。可用于设置默认显示内容
- routes: [{
- path: '/',
- redirect: '/tech'
- }, {
- path: '/sports',
- redirect: '/sports/basketball'
- }, {
- path: '/tech',
- component: tech
- }, {
- path: '/sports',
- component: sports,
- children: [{
- path: '/sports/basketball',
- component: b
- }, {
- path: '/sports/volleyball',
- component: v
- }]
- }]
- });
在Vue实例中添加router,赋值为上面创建的router对象
- const vm = new Vue({
- el: '#app',
- data: function() {
- return {}
- },
- methods: {},
- router: selfRouter
- })
完整代码如下:
- html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- head>
-
- <body>
- <div id="app">
-
- <router-link to="/tech">科技router-link>
- <router-link to="/sports">体育router-link>
- <router-view>
- div>
- <script src="./vue.min.js">script>
- <script src="./vue-router.min.js">script>
- <script>
- // 2.定义组件
- let tech = {
- template: '
科技信息
' - };
- let sports = {
- template: `
-
-
体育信息
-
-
basketball -
volleyball -
-
- `
- };
- let b = {
- template: '
basketball
' - };
- let v = {
- template: '
volleyball
' - };
- // 3.创建VueRounter实例化对象
- const selfRouter = new VueRouter({
- // redirect重定向,当访问的路径是“/”时,直接切换为“/tech路径。可用于设置默认显示内容
- routes: [{
- path: '/',
- redirect: '/tech'
- }, {
- path: '/sports',
- redirect: '/sports/basketball'
- }, {
- path: '/tech',
- component: tech
- }, {
- path: '/sports',
- component: sports,
- children: [{
- path: '/sports/basketball',
- component: b
- }, {
- path: '/sports/volleyball',
- component: v
- }]
- }]
- });
- // 4.在Vue实例中挂载
- const vm = new Vue({
- el: '#app',
- data: function() {
- return {}
- },
- methods: {},
- router: selfRouter
- })
- script>
- body>
-
- html>
- const userIndo = {
- template: `用户的ID值为{{$route.params.id}}`
- };
- let r = new VueRouter({
- routes: [{
- path: '/',
- redirect: '/user/1'
- }, {
- path: '/user/:id',
- component: userIndo
- }]
- });
- const userIndo = {
- props: ['id'],
- template: `用户的ID值为{{id}}`
- };
- let r = new VueRouter({
- routes: [{
- path: '/',
- redirect: '/user/1'
- }, {
- path: '/user/:id',
- component: userIndo,
- props: true
- }]
- });
-
- const userIndo = {
- props: ['uname', 'age'],
- template: `{{uname+'-'+age}}`
- };
- let r = new VueRouter({
- routes: [{
- path: '/',
- redirect: '/user/1'
- }, {
- path: '/user/:id',
- component: userIndo,
- props: {
- uname: '张三',
- age: 20
- }
- }]
- });
- const userIndo = {
- props: ['uname', 'age', 'id'],
- template: `{{uname+'-'+age+'-'+id}}`
- };
- let r = new VueRouter({
- routes: [{
- path: '/',
- redirect: '/user/1'
- }, {
- path: '/user/:id',
- component: userIndo,
- props: r => ({
- uname: '张三',
- age: 20,
- id: r.params.id
- })
- }]
- });
最后一例的完整代码:
- html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
-
- head>
-
- <body>
- <div id="app">
-
- <router-link to="/user/1">用户1router-link>
- <router-link to="/user/2">用户2router-link>
- <router-link to="/user/3">用户3router-link>
- <router-link to="/user/4">用户4router-link>
- <router-link to="/user/5">用户5router-link>
- <router-view>router-view>
- div>
- <script src="./vue.min.js">script>
- <script src="./vue-router.min.js">script>
- <script>
- // 2.定义组件
- const userIndo = {
- props: ['uname', 'age', 'id'],
- template: `{{uname+'-'+age+'-'+id}}`
- };
- // 3.定义路由规则,设置重定向
- let r = new VueRouter({
- routes: [{
- path: '/',
- redirect: '/user/1'
- }, {
- path: '/user/:id',
- component: userIndo,
- props: r => ({
- uname: '张三',
- age: 20,
- id: r.params.id
- })
- }]
- });
- // 4.在Vue实例中挂载路由
- const vm = new Vue({
- el: '#app',
- data: function() {
- return {}
- },
- methods: {},
- router: r
- })
- script>
- body>
-
- html>
在介绍方法之前,首先介绍命名路由的使用。命名路由是给路由起了个名字(通过name属性),这样可以实现指定的跳转。
通过参数传入跳转的数据
前进后退功能,参数为1表示前进,参数为-1表示后退。
- html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
-
- head>
-
- <body>
- <div id="app">
-
- <router-link to="/user/1">用户1router-link>
- <router-link to="/user/2">用户2router-link>
- <router-link to="/user/3">用户3router-link>
- <router-link :to="targeted()">用户4router-link>
- <router-link to="/user/5">用户5router-link>
- <router-view>router-view>
- div>
- <script src="./vue.min.js">script>
- <script src="./vue-router.min.js">script>
- <script>
- const userIndo = {
- props: ['uname', 'age', 'id'],
- template: `{{uname+'-'+age+'-'+id}}
-
-
- `,
- methods: {
- jump() {
- // 1.push('/user/5')
- // 2.push({path: '/user/5'})
- // 3.this.$router.push({
- // name: 'user',
- // params: {
- // id: 123
- // }
- // })
- // 4
- this.$router.push({
- path: 'user/5',
- // 定义查询参数
- query: {
- uid: 123
- }
- })
- }
- }
- };
-
- let r = new VueRouter({
- routes: [{
- path: '/',
- redirect: '/user/1'
- }, {
- name: 'user',
- path: '/user/:id',
- component: userIndo,
- props: r => ({
- uname: '张三',
- age: 20,
- id: r.params.id
- })
- }]
- });
-
- const vm = new Vue({
- el: '#app',
- data: function() {
- return {}
- },
- methods: {
- targeted() {
- return {
- name: 'user',
- params: {
- id: 123
- }
- }
- }
-
- },
- router: r
- })
- script>
- body>
-
- html>