vue路由传参,删除和 监听

本文详细介绍了VueRouter中params和query两种路由参数的传递方式,以及如何在组件中通过watch和beforeRoute系列钩子监听路由变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

路由传参的两种方式params和query

两种方式的区别是query传参的参数会带在url后边展示在地址栏,params传参的参数不会展示到地址栏。需要注意的是接收参数的时候是route而不是router。两种方式一一对应,名字不能混用!

1.Params

// 通过params属性传值
// 路由配置
{
    path:"/menuLink",
    name:"menuLink",
    component:MenuLink
}
this.$router.push({name:"menuLink",params:{name:"测试"}})


// 通过动态路由方式
// 路由配置
{
    path:"/menuLink/:name",
    name:"menuLink",
    component:MenuLink
}

// 页面配置
var name = "测试"
this.$router.push("/menuLink/" + name)


// 取参

<p>提示:{{this.$route.params.name}}</p>



2.Query

// 传参

// 路由配置
{
    path:"/menuLink",
    name:"menuLink",
    component:MenuLink
}

this.$router.push({path:"/menLink",query:{name:"测试"}})



//用query获取值

<p>提示:{{this.$route.query.name}}</p>

删除页面参数

delete this.$route.query.XXX; // XXX代表要删除的参数(即url参数key)

created(){
    const data=this.$route.query;

    if(data.code){
        delete this.$route.query.code  删除页面参数
    }
} 

清除地址栏路由参数

this.$router.push({ query: {} }); // 删除页面参数

created(){

    const data=this.$route.query;

    if(data.code){

        delete this.$router.push({query:{}})  删除页面参数

    }

}

监听路由获取新老路由信息(handler 函数 )


export default{
    watch: { // 监听,当路由发生变化的时候执行
        '$route': { // $route可以用引号,也可以不用引号
            handler(to, from){
            console.log('路由变化了')
            console.log('当前页面路由:' + to); //新路由信息
            console.log('上一个路由:' + from); //老路由信息
            },
            deep: true, // 深度观察监听
            immediate: true, // 第一次初始化渲染就可以监听到
        }
    }

 监听路由变化触发方法

// 方式3、监听路由 $route 变化,触发methods里的方法
export default{
  watch: { 
    '$route':'getPath'
  },
  methods: {
    getPath(){
       console.log(this.$route.path); // 监听,当路由发生变化的时候执行
    }
 
  }
 
}

 监听路由的 path 变化


export default{
    watch: { // 监听,当路由发生变化的时候执行
        '$route.path'(toPath, fromPath){
            console.log('当前页面路由地址:' + toPath)
            console.log('上一个路由地址:' + fromPath)
         },
    }

通过vue-router的组件内钩子函数beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave进行监听

<script>
  // 引入 Tabbar组件
  import mTabbar from './Tabbar'
  import mTabbarItem from './TabbarItem'
  // 引入 vuex 的两个方法
  import {mapGetters, mapActions} from 'vuex'
  
  export default {
    name: 'app',
    // 计算属性
    computed:mapGetters([
      // 从 getters 中获取值
      'tabbarShow'
    ]),
 
    // 监听,当路由发生变化的时候执行
    watch:{
      $route(to,from){
        if(to.path == '/' || to.path == '/Prisoner' || to.path == '/Goods' ||
         to.path == '/Time' || to.path == '/Mine'){
          /**
           * $store来自Store对象
           * dispatch 向 actions 发起请求
           */
          this.$store.dispatch('showTabBar');
        }else{
          this.$store.dispatch('hideTabBar');
        }
      }
    },
 
    beforeRouteEnter (to, from, next) {
      // 在渲染该组件的对应路由被 confirm 前调用
      // 不!能!获取组件实例 `this`
      // 因为当钩子执行前,组件实例还没被创建
    },
 
    beforeRouteUpdate (to, from, next) {
      // 在当前路由改变,但是该组件被复用时调用
      // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
      // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
      // 可以访问组件实例 `this`
    },
 
    beforeRouteLeave (to, from, next) {
      // 导航离开该组件的对应路由时调用
      // 可以访问组件实例 `this`
    },
 
    components:{
      mTabbar,
      mTabbarItem
    },
 
    data() {
      return {
        select:"Building"
      }
    }
  }
</script>

### Vue.js 中的路由传参Vue.js 应用程序中,可以通过多种方式利用 `vue-router` 进行路由之间的参数传递。以下是几种常见的方法及其具体应用。 #### 使用路径中的动态参数 当需要根据 URL 的一部分来展示特定的内容时,比如显示不同用户的个人资料页面,可以采用带有动态部分的路径配置[^1]: ```javascript // 定义路由规则并引入相应的组件 import Vue from 'vue'; import VueRouter from 'vue-router'; import UserProfile from './components/UserProfile.vue'; Vue.use(VueRouter); const router = new VueRouter({ routes: [ { path: '/user/:id', component: UserProfile, }, ], }); new Vue({ router, }).$mount('#app'); ``` 在这个例子中,`:id` 是一个占位符,代表任何有效的 ID 值。访问 `/user/johnDoe` 将会触发加载 `UserProfile` 组件,并且可以在该组件内部通过 `this.$route.params.id` 获取到具体的用户ID。 #### 利用查询字符串 (Query Parameters) 另一种常见的方式是在链接地址后面附加查询参数,这种方式不会改变URL结构本身,而是作为额外的信息附带过去[^2]: ```html <router-link :to="{path:'/Home', query:{ username:'jspang', id:'555' }}"> Go Home with Params </router-link> ``` 上述代码创建了一个指向 `/Home?username=jspang&id=555` 的超链接,在目标页面上可以通过 `this.$route.query.username` `this.$route.query.id` 来获取这些参数。 #### 监听路由变化以响应新的参数 为了处理那些可能会频繁变动的数据源,开发者还可以监听 `$route` 对象的变化事件,从而及时更新视图上的数据[^3]: ```javascript watch: { '$route'(to, from) { console.log('路由发生变化:', to.params, to.query); // 可在此处执行基于新参数的操作... } } ``` 这种方法特别适用于依赖于 URL 参数的应用逻辑场景下,确保每次导航都能正确反映最新的状态。 综上所述,无论是静态还是动态地向其他页面发送信息,都可以借助 vue-router 提供的强大功能轻松完成任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值