vue(10):路由

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路由

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值