vue.js路由vue-router(一)——简单路由基础

前言

vue.js除了拥有组件开发体系之外,还有自己的路由vue-router。在没有使用路由之前,我们页面的跳转要么是后台进行管控,要么是用a标签写链接。使用vue-router后,我们可以自己定义组件路由之间的跳转,还可以设置稍复杂的嵌套路由,创建真正的spa(单页面应用)。我之前用vue-cli脚手架写了一个简单的人员管理实例,现在我们不用脚手架,就用原生的vue来写,本文也主要是通过实例来讲解vue.js+vue-router相关知识。

简单路由跳转实例

1.起步

下载vue-router.js,新建项目文件夹命名为router,将下载的vue-router.js放在router/js/路径下。新建index.html作为主页,引入样式文件,引入两个关键的js,vue和vue-router,再在body标签底部引入一个main.js用来写vue实例及配置路由,注意引用顺序。

 1 <!DOCTYPE html>
 2
 3 <html lang="en">
 4
 5 <head>
 6
 7 <meta charset="UTF-8">
 8
 9 <title>首页</title>
10
11 <link rel="stylesheet" href="css/main.css">
12
13 <script src="js/vue.js"></script>
14
15 <script src="js/vue-router.js"></script>
16
17 </head>
18
19 <body>
20
21 <div id="app"></div>
22
23 <template></template> //组件区域
24
25 <script src="js/main.js"></script>
26
27 </body>
28
29 </html>

2.定义路由视图

调用foot-nav组件,将底部导航组件引入在这里,是因为两个路由页面都要用到它

1 <div id="app">
2
3 <router-view></router-view>
4
5 <foot-nav></foot-nav>
6
7 </div>

知识点::<router-view>

<router-view>标签相当于一个插槽,用于将匹配到的组件渲染出来,一个个路由定义的组件相当于卡,跳转某个路由时,该路由下的页面就插在这个插槽中渲染显示。
一个组件可以有多个<router-view>视图,并用name值去区分它们,这种多用在网页布局方面,如上左主结构,这个时候就可以定义三个<router-view>
示例

 1 <div id="app">
 2
 3 <router-view name="top"></router-view>
 4
 5 <router-view name="left"></router-view>
 6
 7 <router-view name="main"></router-view>
 8
 9 </div>
10
11
12
13 <script>
14
15 var topCom = Vue.extend({
16
17 template: ‘<div>顶部</div>‘
18
19 })
20
21
22
23 var leftCom = Vue.extend({
24
25 template: ‘<div>侧边栏</div>‘
26
27 })
28
29
30
31 var mainCom = Vue.extend({
32
33 template: ‘<div>主页</div>‘
34
35 })
36
37
38
39 var router = new VueRouter({
40
41 routes:[
42
43 {
44
45 path: ‘/‘,
46
47 name: ‘home‘,
48
49 components:{
50
51 top: topCom,
52
53 left: leftCom,
54
55 main: mainCom
56
57 }
58
59 }
60
61 ]
62
63 })
64
65
66
67 var app = new Vue({
68
69 el: ‘#app‘,
70
71 router
72
73 })
74
75 </script>

再为各个板块设置一下样式,打开浏览器查看效果

3.子组件(底部导航)

3.1 创建子组件

人员管理系统分为两个模块,一个首页,一个管理页,两个页面都需引入一个公共组件:底部导航。在首页index.html中加入以下模板

 1 <template id="footer">
 2
 3 <div class="footer fixed">
 4
 5 <ul>
 6
 7 <li><router-link to="/">首页</router-link></li>
 8
 9 <li><router-link :to="{name:‘manage‘,params:{id:1}}">人员管理</router-link></li>
10
11 </ul>
12
13 </div>
14
15 </template>

知识点::<router-link>

<router-link>标签主要实现跳转链接功能,属性to=‘/‘即是跳转到path为‘/‘的路径(我们等会得配置路径为‘/‘和‘/manage‘的路由)
router-link除了可以跳转链接之外,还可以传参,可以传多个参数,一般格式为

<router-link to="路由路径"></router-link>
<router-link :to="{ path:路由路径}"></router-link>
<router-link :to="{name:‘路由命名‘,params:{参数名:参数值,参数名:参数值}}"></router-link>

知识点:this.$router.push

如果不想用<router-link>标签,也可以给需要跳转的地方添加一个点击事件,在事件里写this.$router.push方法

this.$router.push(‘路由路径‘)
this.$router.push({name:‘路由命名‘,params:{参数名:参数值,参数名:参数值}})

3.2 注册子组件

在main.js中全局注册子组件并且定义vue实例

 1 Vue.component(‘foot-nav‘,{
 2
 3 template: ‘#footer‘
 4
 5 })
 6
 7
 8
 9 var app = new Vue({
10
11 el: ‘#app‘
12
13 })

4.首页及管理页组件

4.1 创建首页及管理页

 1 <template id="index">
 2
 3 <div>
 4
 5 首页
 6
 7 </div>
 8
 9 </template>
10
11 <template id="manage">
12
13 <div>
14
15 人员管理
16
17 <p>id:{{id}}</p>
18
19 </div>
20
21 </template>

4.2 注册主页及管理页

 1 var Home = Vue.extend({
 2
 3 template: ‘#index‘
 4
 5 })
 6
 7
 8
 9 var Manage = Vue.extend({
10
11 template: ‘#manage‘,
12
13 data(){
14
15 return{
16
17 id: ‘‘
18
19 }
20
21 },
22
23 mounted:function(){
24
25 this.id = this.$route.params.id
26
27 }
28
29 })

知识点:this.$route.params

this.$route指向vue实例的路由对象,params是路由传过来的参数集合

5.定义路由

定义路由router,并引进vue实例中

 1 var router = new VueRouter({
 2
 3 routes:[
 4
 5 {
 6
 7 path:‘/‘,
 8
 9 name: ‘home‘,
10
11 component:Home
12
13 },
14
15 {
16
17 path:‘/manage/:id‘,
18
19 name: ‘manage‘,
20
21 component:Manage
22
23 }
24
25 ]
26
27 })
28
29
30
31 var app = new Vue({
32
33 el: ‘#app‘,
34
35 router
36
37 })

知识点:path:‘/路径/:参数名‘

一个路由要传参时,需在path路径后面添加一个‘/’并加上冒号和参数名

知识点:路由激活class

vue-router当路由处于激活状态时,会有一个class类“router-link-active”,我们只需为这个类添加样式就可以实现路由激活状态下的样式编写
接下来去浏览器查看路由跳转效果

6.嵌套路由

有时我们项目由多层嵌套组件组成,这个时候就需要用到嵌套路由
先看下图例子,我们给manage路由再添加两个子路由

6.1 在组件内部添加<router-view>

 1 <template id="manage">
 2
 3 <div>
 4
 5 人员管理
 6
 7 <ul>
 8
 9 <li><router-link to="/manage/list">人员列表</router-link></li>
10
11 <li><router-link to="/manage/edit">编辑</router-link></li>
12
13 </ul>
14
15 <router-view></router-view>
16
17 </div>
18
19 </template>

6.2 定义子路由

 1 //构建组件
 2
 3 var List = Vue.extend({
 4
 5 template: ‘<div>人员列表</div>‘
 6
 7 })
 8
 9
10
11 var Edit = Vue.extend({
12
13 template: ‘<div>编辑</div>‘
14
15 })
16
17
18
19
20
21
22
23 var router = new VueRouter({
24
25 routes:[
26
27 {
28
29 path:‘/‘,
30
31 name: ‘home‘,
32
33 component:Home
34
35 },
36
37 {
38
39 path:‘/manage‘,
40
41 name: ‘manage‘,
42
43 component:Manage,
44
45 //子路由由children表示
46
47 children:[
48
49 {
50
51 path:‘list‘,
52
53 name: ‘list‘,
54
55 component:List
56
57 },
58
59 {
60
61 path:‘edit‘,
62
63 name: ‘edit‘,
64
65 component:Edit
66
67 }
68
69 ]
70
71 }
72
73 ]
74
75 })

7.路由重定向

未设置路由重定向时,当我们随意输入一个路径,会显示一片空白或404。为了防止这种现象发生,我们一般在配置路由时再定义一个重定向路由

 1
 2 var router = new VueRouter({
 3
 4 routes:[
 5
 6 {
 7
 8 path:‘/‘,
 9
10 name: ‘home‘,
11
12 component:Home
13
14 },
15
16 {
17
18 path:‘*‘,
19
20 redirect: ‘/‘
21
22 },
23
24 ]
25
26 })

打开浏览器,随意输入一个未定义的路由查看效果

原文地址:https://www.cnblogs.com/weifeng123/p/9876429.html

时间: 2024-08-25 12:43:41

vue.js路由vue-router(一)——简单路由基础的相关文章

js 引入Vue.js实现vue效果

拆分组件为单个js见:https://www.jianshu.com/p/2f0335818ceb 效果: html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, u

Vue.js起手式+Vue小作品实战

本文是小羊根据Vue.js文档进行解读的第一篇文章,主要内容涵盖Vue.js的基础部分的知识的,文章顺序基本按照官方文档的顺序,每个知识点现附上代码,然后根据代码给予个人的一些理解,最后还放上在线编辑的代码以供练习和测试之用:在最后,我参考SegmentFault上的一篇技博,对Vue进行初入的实战,目的是将新鲜学到的知识立即派上用场:如果你还是前端的小白,相信这篇文章可能会对产生一些帮助和引起思想的碰撞,因为大家的学习历程是相似的,遇到的困惑也有一定的共通性,如果文章出现谬误之处,欢迎各位童鞋

[vue遇错记录] vue.js:569 [Vue warn]: Cannot find element: #app

写了一个很简单的界面,console提示:vue.js:569 [Vue warn]: Cannot find element: #vue-app.找了半天才发现原因: <script src="../vue.js"></script> <div id="app"> {{ message }} </div> <script src="app.js"></script> <

Vue.js中,如何自己维护路由跳转记录?

在Vue的项目中,如果我们想要做返回.回退操作时,一般会调用router.go(n)这个api,但是实际操作中,使用这个api有风险,就是会让用户跳出当前应用,因为它记录的是浏览器的访问记录,而不是你当前应用的访问记录,这是非常可怕的事情. 解决方案就是,我们自己来维护一份history跳转记录. 案例与使用场景 代码地址:https://github.com/dora-zc/mini-vue-mall 这是一个基于Vue.js的小型商城案例,应用场景: 自己实现一个Vue插件src/utils

vue.js几行实现的简单的todo list

序:目前前端框架如:vue.react.angular,构建工具fis3.gulp.webpack等等...... 可谓是五花八门,层出不穷,眼花缭乱...其实吧只要你想玩还是可以玩玩的..下面是看了2天vuejs的官方文档实现了一个简单的todo list.感觉确实方便~!~ 预览戳这里 vuejs官方:http://cn.vuejs.org/ <!DOCTYPE html> <html lang="en"> <head> <meta cha

学习Vue.js之vue移动端框架到底哪家强

官网:https://cn.vuejs.org/ Weex 2016年4月21日,阿里巴巴在Qcon大会上宣布跨平台移动开发工具Weex开放内测邀请. Weex 是一套简单易用的跨平台开发方案,能以 web 的开发体验构建高性能.可扩展的 native 应用,为了做到这些,Weex 与 Vue 合作,使用 Vue 作为上层框架,并遵循 W3C 标准实现了统一的 JSEngine 和 DOM API,这样一来,你甚至可以使用其他框架驱动 Weex,打造三端一致的 native 应用. Weex能够

关于Vue.js和Vue.js的优缺点以及和与其他前端框架的区别

首先,我们先了解什么是MVX框架模式? MVX框架模式:MVC+MVP+MVVM 1.MVC:Model(模型)+View(视图)+controller(控制器),主要是基于分层的目的,让彼此的职责分开. View通过Controller来和Model联系,Controller是View和Model的协调者,View和Model不直接联系,基本联系都是单向的. 用户User通过控制器Controller来操作模板Model从而达到视图View的变化. 2.MVP:是从MVC模式演变而来的,都是通

Vue.js简介

Vue.js简介 Vue.js的作者为Evan You(尤雨溪),任职于Google Creative Lab,虽然是Vue是一个个人项目,但在发展前景上个人认为绝不输于Google的AngularJs,下面我会将Vue与Angular(Angular 1.0+版本)做一些简单的比较. Vue的主要特点就和它官网(http://cn.vuejs.org/)所介绍的那样: (1) 简洁 (2) 轻量 (3)快速 (4) 数据驱动 (5) 模块友好 (6) 组件化 简单 下面看一段Angular的实

Vue.js 实战总结

最近在某个项目中用到了Vue.js,从上手做开发到项目发布,一步步踩了不少坑.本文试图总结过去一个多月使用Vue.js中的一些经验,也算是一点心得体会吧,拿出来与大家分享,欢迎多多交流. Vue.js简介 Vue.js is a JavaScript framework for building astonishing web applications. Vue.js is a JavaScript library for creating web interfaces. Vue.js is a