前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >十五.Vue路由

十五.Vue路由

作者头像
Yuyy
发布2022-06-28 20:45:03
发布2022-06-28 20:45:03
25900
代码可运行
举报
运行总次数:0
代码可运行

本文最后更新于 867 天前,其中的信息可能已经有所发展或是发生改变。

什么是路由

  1. 后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;
  2. 前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;
  3. 在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由);

在 vue 中使用 vue-router

  1. 导入 vue-router 组件类库:
代码语言:javascript
代码运行次数:0
复制
  <script src="./lib/vue-router-2.7.0.js"></script>

和vue-resource一样需要先导入Vue的

  1. 使用 router-link 组件来导航
代码语言:javascript
代码运行次数:0
复制
<router-link to="/login">登录</router-link>
<router-link to="/register">注册</router-link>
  1. 使用 router-view 组件来显示匹配到的组件
代码语言:javascript
代码运行次数:0
复制
<router-view></router-view>
  1. 创建组件
代码语言:javascript
代码运行次数:0
复制
    var login = {
      template: '<h1>登录组件</h1>'
    }
  1. 创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则
代码语言:javascript
代码运行次数:0
复制
    var router = new VueRouter({
      routes: [
        { path: '/login', component: login },
        { path: '/register', component: register }
      ]
    });
  1. 使用 router 属性来使用路由规则
代码语言:javascript
代码运行次数:0
复制
    var vm = new Vue({
      el: '#app',
      router: router 
    });

使用tag属性指定router-link渲染的标签类型

  • router-link 默认渲染为一个a 标签
代码语言:javascript
代码运行次数:0
复制
<router-link to="/login" tag="span">登录</router-link>

设置路由重定向

代码语言:javascript
代码运行次数:0
复制
{ path: '/', redirect: '/login' }, 

设置路由高亮

代码语言:javascript
代码运行次数:0
复制
<style>
    .router-link-active,
    .myactive {
      color: red;
      font-weight: 800;
      font-style: italic;
      font-size: 80px;
      text-decoration: underline;
      background-color: green;
    }
  </style>
代码语言:javascript
代码运行次数:0
复制
var routerObj = new VueRouter({
      routes: [     
        { path: '/login', component: login }
      ],
      //修改默认样式类
      linkActiveClass: 'myactive'
    })

在路由规则中定义参数

  • 方式一
    1. 在规则中定义参数: { path: '/register/:id', component: register }
    2. 传递参数 <router-link to="/login/12/ls">登录</router-link>
    3. 通过 this.$route.params来获取路由中的参数: var register = Vue.extend({ template: '<h1>注册组件 --- {{this.$route.params.id}}</h1>' });
  • 方式二
    • 不需要修改 路由规则的 path 属性 <router-link to="/login?id=10&name=zs">登录</router-link> this.$route.query.id

使用 children 属性实现路由嵌套

代码语言:javascript
代码运行次数:0
复制
  <div id="app">
    <router-link to="/account">Account</router-link>
    <router-view></router-view>
  </div>
  <template id="tmpl">
    <div>
      <h1>这是 Account 组件</h1>
      <router-link to="/account/login">登录</router-link>
      <router-link to="/account/register">注册</router-link>
      <router-view></router-view>
    </div>
  </template>
  <script>
    // 组件的模板对象
    var account = {
      template: '#tmpl'
    }
    var login = {
      template: '<h3>登录</h3>'
    }
    var register = {
      template: '<h3>注册</h3>'
    }

    // 路由实例
    var router = new VueRouter({
      routes: [
        {
          path: '/account',
          component: account,
          // 使用 children 属性,实现子路由,同时,子路由的 path 前面,不要带 / ,否则永远以根路径开始请求,这样不方便我们用户去理解URL地址
          children: [
            { path: 'login', component: login },
            { path: 'register', component: register }
          ]
        }       
      ]
    })
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
      router: router
    });
  </script>

命名视图实现经典布局

代码语言:javascript
代码运行次数:0
复制
<div id="app">
  <router-view></router-view>
  <router-view name="left"></router-view>
  <router-view name="main"></router-view>
</div>

var header = {
  template: '<h1 class="header">Header头部区域</h1>'
}
var leftBox = {
  template: '<h1 class="left">Left侧边栏区域</h1>'
}
var mainBox = {
  template: '<h1 class="main">mainBox主体区域</h1>'
}

// 创建路由对象
var router = new VueRouter({
  routes: [
    {
      path: '/', components: {
        'default': header,
        'left': leftBox,
        'main': mainBox
      }
    }
  ]
})

Post Views: 396

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-2-11 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是路由
  • 在 vue 中使用 vue-router
  • 使用tag属性指定router-link渲染的标签类型
  • 设置路由重定向
  • 设置路由高亮
  • 在路由规则中定义参数
  • 使用 children 属性实现路由嵌套
  • 命名视图实现经典布局
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档