VUE-Router基本配置

前端路由有什么优点和缺点?
• 优点:用户体验好,不需要每次都从服务器全部获取,快速展现给用户
• 缺点:不利于SEO;使用浏览器的前进,后退键的时候会重新发送请求,没有合理地利用缓存;单页面无法记住之前滚 动的位置,无法在前进,后退的时候记住滚动的位置

这里的路由并不是指我们平时所说的硬件路由器,这里的路由就是SPA(单页应用)的路径管理器。再通俗的说,vue-router就是我们WebApp的链接路径管理系统

Vue-Router入门

安装vue-router npm install vue-router --save-dev

这里建议使用vue-cli脚手架 生成vue-router

vue init webpack vue-cli

在vue-router选项选择yes 就可以了

在src目录下的router index.js文件已经配置好了

引入组件HelloWorld的时候 这里有个"@" 其实是webpack配置的路径设置默认为src

此时我们进入vue-cli 运行 npm run dev 默认打开http://localhost:8080就能看到HelloWorld中的内容了

简单谈一下router-view router-link

router-view用来显示对应组件的内容,通过router-link传递信息匹配相应的组件渲染router-view
有点类似于tab切换,可以理解为DOM元素的显示隐藏

为什么不用a标签切换

因为我们用Vue作的都是单页应用,就相当于只有一个主的index.html页面,所以<a></a>标签是不起作用的,必须使用vue-router来进行管理。

路由中三个基本的概念 route, routes, router

1 . route,它是一条路由,Home按钮 => home内容, 这是一条route, about按钮 => about 内容, 这是另一条路由,存储着当前路由页面的信息,实际开发多用$route用来获取信息

2 . routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。实际开发用处不多

3 . router 是一个机制,相当于一个管理者,它来管理路由。居多是对路由路径的操作

这边简单介绍一下meta元信息

meta也是存在于对象中的一个属性,此属性作用不是很大,一般用来判断当前是否切换到了路由,切换成功显示组件内容的作用,亦或是在$route.meta读取内容,可以设置值为数组用来调用

接下来开始实例

在components中新建组件并存入路由中
这是HelloWorld中的内容

然后我们在url中修改一下路径

回车之后显示的内容如下

一旦我们在路由中设置好对象属性,就可以在url中改变path显示内容了

router-link

如何通过router-link绑定路由

router-link一定是在有router-view标签的组件当中,通过to绑定路由中的path路径,用来切换router-view中的内容,同时改变对应的url路径

配置子路由(嵌入路由)

子路由的情况一般用在一个页面有他的基础模版,然后它下面的页面都隶属于这个模版,只是部分改变样式

新建三个组件

编辑路由

此时已经可以使用url进入组件,使用router-link编辑一下router-view

router-view 一定是存在父路由中的 也就是Test中


vue-router传递参数(一)

利用router-link 中的to进行传参 格式如下 注意to前面加冒号 数据绑定

     <router-link :to="{name:name,params:{key:value}}">XXXXX</router-link>

name代表路由中设置的name params代表传递的对象

    <router-link :to="{name:'Test1',params:{user:'username'}}">test1</router-link>
    <router-link to="/test/test2">test2</router-link>

在子路由中,父路由的name是无效的 只有children中的name才有效

{
  path:'/test',
  name:'Test',
  component:Test,
  children:[
    {path:'/',component:Test},          //此处path路径 / 表示父路由下的根目录 也就是/test 显示Test
    {path:'test1',name:'Test1',component:Test1},     //子路由不需要加/  
    {path:'test2',component:Test2}
  ]
}

使用$route属性进行接参

通过设定的参数即可显示

vue-router传递参数(二)

利用url传递参数,也就是直接在路由path中设置参数

简单说明一下

{
path:'/params/:newsId/:newsTitle',  //冒号后面的都是参数
 component:Params
}

还是利用$route接收参数

    <p>{{ $route.params.newsId}}</p>
    <p>{{ $route.params.newsTitle}}</p>

但是此时我们的router-link写法要稍微改变一下

<router-link to="/params/520/vue">params</router-link>

此时传递内容稍微有点固化,可根据实际情况,个人喜好进行设置

这里有个小技巧,设置一下传递的数据类型,比如我们想要数字禁止传递对象

path:'/params/:newsId(\\d+)/:newsTitle',

给参数后面设定一个正则即可,一般还是使用to传参

单页面多路由区域操作

更改了一下路由 当component属性为多个时要加s

除了default参数是固定的其余可以自定义

通过router-view进行编辑,routes中的根路由的父路由都是通过APP.VUE渲染的 注意一下 所以我们在APP.VUE中编辑 router-view

    <template>
      <div id="app">
        <router-link to='/'>HelloWorld</router-link>
        <router-link to='/test'>Test</router-link>
        <router-view/>
              <router-view name="lefts" style="float:left;width:50%;background-color:#ccc;height:300px;"></router-view>
            <router-view name="right" style="float:right;width:50%;background-color:#c0c;height:300px;"></router-view>
      </div>
    </template>

效果就不演示了 可以复制代码测试一下

vue-router 的重定向

开发中有时候我们虽然设置的路径不一致,但是我们希望跳转到同一个页面,或者说是打开同一个组件。这时候我们就用到了路由的重新定向redirect参数。

    export default new Router({
      routes: [                     
        {                           
          path: '/',               
          name: 'HelloWorld',       
          component:HelloWorld
        },{
          path:'/goback',
          redirect:'/'
        }
      ]
    })

在对象中设置redirect参数,配置为路径,当url中输入/goback路径的时候 会自动转入根路由

一般可以用来配置404调用 设置通配符* 路径即可

{
   path:'*',
   redirect:'/404组件'
}

重定向的配置跟path是相同的 也就是说也可以配置url参数

   {
      path:'/goParams/:newsId/:newsTitle',
      redirect:'/params/:newsId/:newsTitle'
    }

alias别名的使用

    export default new Router({
      routes: [                     
        {                           
          path: '/',               
          name: 'HelloWorld',       
          component:HelloWorld
        },{
          path:'/test',
          component:Test,
          alias:'/tests'
        }
      ]
    })

其实就是双向path,可以通过path路径也可以通过alias路径访问路由,类似重定向

redirect和alias的区别

redirect:仔细观察URL,redirect是直接改变了url的值,把url变成了真实的path路径。
alias:URL路径没有别改变,这种情况更友好,让用户知道自己访问的路径,只是改变了<router-view>中的内容。

alias小坑

别名请不要用在path为’/’中,也就是根路由中,将不起作用

路由的过渡动画

在开发中有一种需求叫高端、大气、上档次。可以在页面切换时我们加入一些动画效果,提升我们程序的动效设计。

格式如下,在router-view外套上transition标签 name内容自定义

    <transition name="fade">
      <router-view ></router-view>
    </transition>

css过渡类名: 组件过渡过程中,会有四个CSS类名进行切换,这四个类名与transition的name属性有关,比如name=”fade”,会有如下四个CSS类名:

1、fade-enter:进入过渡的开始状态,元素被插入时生效,只应用一帧后立刻删除。
2、fade-enter-active:进入过渡的结束状态,元素被插入时就生效,在过渡过程完成后移除。
3、fade-leave:离开过渡的开始状态,元素被删除时触发,只应用一帧后立刻删除。
4、fade-leave-active:离开过渡的结束状态,元素被删除时生效,离开过渡完成后被删除。

以下css供测试 注意要有路由切换,做好路由设置先

    .fade-enter {
      opacity:0;
    }
    .fade-leave{
      opacity:1;
    }
    .fade-enter-active{
      transition:opacity .5s;
    }
    .fade-leave-active{
      opacity:0;
      transition:opacity .5s;
    }

transition还有mode标签

    <transition name="fade" mode=" ">
      <router-view ></router-view>
    </transition>

过渡模式mode:
in-out:新元素先进入过渡,完成之后当前元素过渡离开。 (默认)
out-in:当前元素先进行过渡离开,离开完成后新元素过渡进入。

路由的mode设置

mode的两个值
histroy:当你使用 history 模式时,URL 就像正常的 url
hash:默认’hash’值,但是hash看起来就像无意义的字符排列,不太好看也不符合我们一般的网址浏览习惯。

    export default new Router({
      mode:'history',
      routes: [                     
        {                           
          path: '/',               
          name: 'HelloWorld',       
          component:HelloWorld
        },{
          path:'/test',
          component:Test,
          alias:'/tests'
        }
      ]
    })

两者的区别还有很多,可以自行百度一下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容