
本文共 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路由
发表评论
最新留言
关于作者
