vue(10):路由
发布日期:2021-05-07 08:58:07 浏览次数:21 分类:原创文章

本文共 4828 字,大约阅读时间需要 16 分钟。

Vue.js 路由允许我们通过不同的 URL 访问不同的内容。

相关属性

to
表示目标路由的链接。 当被点击后,内部会立刻把 to 的值传到 router.push(),所以这个值可以是一个字符串或者是描述目标位置的对象

<!-- 字符串 --><router-link to="home">Home</router-link><!-- 渲染结果 --><a href="home">Home</a><!-- 使用 v-bind 的 JS 表达式 --><router-link v-bind:to="'home'">Home</router-link><!-- 不写 v-bind 也可以,就像绑定别的属性一样 --><router-link :to="'home'">Home</router-link><!-- 同上 --><router-link :to="{ path: 'home' }">Home</router-link><!-- 命名的路由 --><router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link><!-- 带查询参数,下面的结果为 /register?plan=private --><router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>

replace
设置 replace 属性的话,当点击时,会调用 router.replace() 而不是 router.push(),导航后不会留下 history 记录

<router-link :to="{ path: '/abc'}" replace></router-link>

append
设置 append 属性后,则在当前 (相对) 路径前添加基路径。例如,我们从 /a 导航到一个相对路径 b,如果没有配置 append,则路径为 /b,如果配了,则为 /a/b

<router-link :to="{ path: 'relative/path'}" append></router-link>

tag
有时候想要 渲染成某种标签(如果不设置默认渲染成a标签),例如

  • 。 于是我们使用 tag prop 类指定何种标签,同样它还是会监听点击,触发导航
  • <router-link to="/foo" tag="li">foo</router-link><!-- 渲染结果 --><li>foo</li>

    active-class
    设置 链接激活时使用的 CSS 类名。

    <style>   ._active{           background-color : red;   }</style><p>   <router-link v-bind:to = "{ path: '/route1'}" active-class = "_active">Router Link 1</router-link>   <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2</router-link></p>

    exact-active-class
    配置当链接被精确匹配的时候应该激活的 class。

    <p>   <router-link v-bind:to = "{ path: '/route1'}" exact-active-class = "_active">Router Link 1</router-link>   <router-link v-bind:to = "{ path: '/route2'}" tag = "span">Router Link 2</router-link></p>

    event
    声明可以用来触发导航的事件。可以是一个字符串或是一个包含字符串的数组。

    <router-link v-bind:to = "{ path: '/route1'}" event = "mouseover">Router Link 1</router-link>

    以上代码设置了 event 为 mouseover ,及在鼠标移动到 Router Link 1 上时导航的 HTML 内容会发生改变。

    基本步骤

    • 定义(路由)组件。 可以从其他文件 import 进来
    • 定义路由每个路由应该映射一个组件。 其中"component" 可以是通过 Vue.extend() 创建的组件构造器, 或者,只是一个组件配置对象。
    • 创建 router 实例,然后传 routes 配置
    • 创建和挂载根实例。记得要通过 router 配置参数注入路由, 从而让整个应用都有路由功能

    其它

    <router-view>
    路由占位符,通过路由规则匹配到的组件都会被渲染到<router-view>标签所在的位置

    定义路由

    var router=[		path: //要显示的虚拟路径,URL格式,并且要和to后面的路径保持一致		name: //路由的名称		component: //要渲染的组件,组件名是个对象不要加引号		redirect:  //重定向		children : //数组,保存路由组件嵌套的组件	]

    重定向

    //重定向可以是一个路径:{     '/a', redirect:'/b'} //从路径a跳转到路径b{     '*', redirect:'/b'} //从任意路径跳转到路径b//重定向也可以是一个路由:{     '/a', redirect: {     name: 路由名(字符串)}} //从路径a跳转到路径b

    当访问的某个路由不存在时,会自动跳转到设置的位置

    路由实例方法

    1.router.push({     path:"home"}); // 直接添加路由, 往历史记录里添加一个2.router.replace({     path:"home"}) // 替换路由, 不在历史记录

    路由的模板
    如果模板比较简短可以之间用单引号引起,但是如果比较复杂的话像我下面用字符串进行拼接有些麻烦,可以使用使用反单引号来引起

    template: `       <div>         <h1>标题</ h1>         <p>内容</p>       </div>   `				

    简单实例

    简单实例

    <body><!-- 使用在线的vue.js和vue-router.js --><script src="https://unpkg.com/vue/dist/vue.js"></script><script src="https://unpkg.com/vue-router/dist/vue-router.js"></script><div id="app">	<p>Hello App!</p>	<!-- 使用 router-link 组件来导航.,默认被渲染成a标签 -->	<router-link to="/link1">Link1</router-link>	<router-link to="/link2">Link2</router-link>	<!-- 或者 必须有#号,不推荐-->	<a href="#/link1">Link1</a> 	<!-- 路由匹配到的组件将渲染在这里 -->	<router-view></router-view></div><script>	//1、定义路由组件	var Link1 = {     		template: '<div>我是路由组件1</div>'	}	var Link2 = {     		template: '<div>我是路由组件2</div>'	}	//2、定义路由	var routes = [{     			path: '/link1',			name: 'link1',			component: Link1		},		{     			path: '/link2',			name: 'link2',			component: Link2		}	]	//3. 创建 router 实例,然后传 `routes` 配置	var router = new VueRouter({     		routes	})	//4、创建和挂载根实例。	new Vue({     		el: '#app',		router: router	})</script></body>

    路由嵌套实例

    <body>	<!-- 使用在线的vue.js和vue-router.js -->	<script src="https://unpkg.com/vue/dist/vue.js"></script>	<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>	<div id="app">		<router-link to="/home">首页</router-link>		<router-link to="/user">用户</router-link>		<router-view></router-view>	</div>	<script>		//1、定义路由组件		var Home = {     			template: '<div>这里是主页</div>'		}		var UserDetail = {     			template: '<p>我是xxx用户</p>'		}		var User = {      //嵌套路由			template: '<div class="user">' +				'<h3>我是用户</h3>' +				'<ul><li><router-link to="/user/username">某个用户</router-link></li> </ul>' +				'<div><router-view></router-view></div>' +				'</div>'		}		//2、定义路由		var routes = [{     				path: '/home',				component: Home			},			{      //嵌套路由				path: '/user',				component: User,				children: [{     					path: "username",					component: UserDetail				}],			},			{      //重定向				path: "*",				redirect: "/home"			}		]		//3. 创建 router 实例,然后传 `routes` 配置		var router = new VueRouter({     			routes		})		//4、创建和挂载根实例。		new Vue({     			el: '#app',			router: router		})	</script></body>

    注:
    1、嵌套的路由,path不要再加’/’,例如path: "username"修改为path: “/username”,会无法跳转
    重定向:path: “*”, redirect: “/home” 意思是当任意一个路由不存在时,点击都会跳转到home路由

上一篇:【数算-30】【十大常用算法-02】分治算法
下一篇:【数算-29】【十大常用算法-01】非递归二分查找

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月15日 11时58分03秒