vue-router 路由的基本使用(2)

呈现路由下的组件内容

在vue-cli脚手架创建下的文件结构中的App.vue文件会有以下代码,展现当前路由下的视图,即当前路由时什么,这块内容就会被当做当前路由指向的组件内容显示

<div id="app">
  <router-view></router-view>
</div>

以上 <router-view>是作为路由的最高级展现的内容

 <router-view>也可以用来展示当前路由下的子路由的内容,如类似以下CSDN页面就经常容易用到,左边不变,当点击左边列表时,只有右边的内容发生改变,那么右边这块内容就可以使用 <router-view></router-view>,而具体的变化内容可以使用不同的组件作为当前路由的子路由

嵌套子路由

在原路由的属性上多加一个children属性,属性值是一个数组,数组里可以嵌套多个子路由

...
{
      path: '/index',
      component: index,
      children: [
        {
          path: '/content',
          component: content
        },
        {
          path: ':id',
          component: page
        },
      ]
}

当访问到 '/index/content' 的时候,在index组件下的<router-view/>就会显示content组件的内容,也可以用后面的:id路径显示id号而不是组件名

之前的动态路由也是一个父路由下发生内容变化,但是动态路由是指信息内容的变化,大体样式不改变,而子路由一般是用来在同一个父路由下有不同的样式组件,所以两者互不冲突

基本跳转路由

直接使用<router-link></router-link>将你需要点击的内容包裹起来,相当于<a>标签,然后添加属性  to  为想要去的路由(必须和routes中注册的路由相同)

<router-link to="/index">Go to Index</router-link>

 也可以触发click事件:使用this.$router.push()

...
@click='goIndex'
...
goIndex() {
    this.$router.push('/index')                  //默认为path
    this.$router.push(path: '/index') 
    this.$router.push(name: 'index')            //必须是和routes中注册路由的name相同
}

如果是动态路由可以  '/index' 变成  '/index/' + id

传递参数

  • path和name分别对应的是query和params,如果不对应,就不会起效果
  • query的参数会被作为路径,刷新任然保留,而params的参数会传递到指向路由下,但刷新不会保留
// 命名的路由,即路由有name属性
<router-link :to="{ name: 'index', params: { Id: 123}}">go to Index</router-link>

// 带查询参数,变成 /index?Id=123
<router-link :to="{ path: '/index', query: { Id: 123}}">go to Index</router-link>
// 命名的路由,即路由有name属性
this.$router.push({ name: 'index', params: { userId: 123 }})

// 带查询参数,变成 /index?Id=123
this.$router.push({ path: '/index', query: { Id: '123' }})

进阶 api——路由监听

可以对route变化,即popstate事件触发时,进行观察

  • beforeEach可以在当将要跳转页面和离开页面的时候进行一些事件处理
const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
  if (!loginSuccess) {
      next({ path: '/index' })
  }
  // 确保要调用 next 方法,否则钩子就不会被 resolved
  next()
})
  •  afterEach这是监听路由跳转之后的处理,所以已经不需要next了
router.afterEach((to, from) => {
  // ...
})

也可以对单个路由进行路由监听

  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave

可在配置路由时,同时配置

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})

同样,也可以在组件内使用watch监听$route对象,一般放在最外层(因为不是很好维护),作为路由切换的过渡效果,因为这里可以通过this来对组件进行处理

watch: {
  '$route' (to, from) {
    // ...
  }
}

滚动位置(只有当浏览器支持history.pushState才能使用)

const router = new VueRouter({
  routes: [...],
  scrollBehavior (to, from, savedPosition) {
    // return 期望滚动到哪个的位置
    return { x: 0, y: 0 };
  }
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值