vue学习笔记--动态路由跳转,页面响应路由参数的变化

最近在做项目中遇到一个问题,当搜索公司名字的时候,需要刷新页面数据并且改变地址栏的参数

query传递参数

searchCompany () {
      this.$router.push({
        path: 'company',
        query: {
          page: 1,
          word: this.searchValue === '' ? undefined : this.searchValue,
          search:this.searchValue
        }
      })
    }
复制代码

通过注入路由器,我们可以在任何组件内通过用this.router访问路由器,也可以通过 this.route访问当前路由.使用this.$router.push(location).可以导航到不同的 URL。这个方法会向 history栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。

栗子:

// 字符串
router.push('home')

// 对象
this.$router.push({path: '/login?url=' + this.$route.path});

// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})

// 带查询参数,变成/backend/order?selected=2
this.$router.push({path: '/backend/order', query: {selected: "2"}});
复制代码

响应路由参数的变化

watch(监测变化) $route 对象

(引用官网解释)当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。 复用组件时,想对路由参数的变化作出响应的话,你可以简单地 watch(监测变化) $route 对象

const User = {
  template: '...',
  watch: {
    '$route' (to, from) {
      // 对路由变化作出响应...
    }
  }
}
复制代码

或者使用 beforeRouteUpdate 守卫:

  beforeRouteUpdate (to, from, next) {
    this.$parent.loading = true
    this.reload({ item: 'company', params: {
      page: to.query.page ? to.query.page : undefined,
      word: to.query.word ? to.query.word : undefined,
      search:this.searchValue
    }})
      .then(res => {
        this.$parent.loading = false
      })
    next()
  }
复制代码

在组件更新前重新调用生命钩子,重新加载接口,从而达到更新页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值