Vue的路由传参

三种方式

1.:id 路由动态传参
2. query传参 这个用path传参
3. params传参 这个用name传参,通过冒号传的参都放在这个属性上了

1.:id 路由动态传参

 <div id="app">
        <router-link to="/home/1">第一本</router-link>
        <router-link to="/home/2">第二本</router-link>
        <router-link to="/home/3">第三本</router-link>
        <router-view></router-view>
    </div>

        let home={
            // created(){
            //     // 
            //     console.log(this.$route);
            // },
            // watch:{
            //     '$route'(to,from){
            //        console.log(to);// to: 要到达的组件的$route
            //        console.log(from);// from :上一个$route
            //     }
            // },
            // 路由守卫
            // 在路由更新之前会默认调用该钩子函数
            beforeRouteUpdate(to,from,next){
                console.log(to);// 即将进入的目标路由的对象信息
               console.log(from);// 即将离开路由的对象信息
                console.log(next);// 函数
                // 1. next 函数
                // next(): 会立即进入到目标路由
                // next(false):中断当前的导航;不再去访问下一个路由
                if(to.params.id==3){
                    next({path:"/home/1"});
                    return;
                }
                // 权限校验
                next();
            },
            template:"<div>这是我喜欢的第{{$route.params.id}}本书</div>"
        }
        
        // 动态路由:路由传参;路径后面是一个:变量;这就是动态路由,也可以叫路由动态传参;会把id以属性方式放到$route的params属性上,属性值就是路由实际的路径值 

        // 1.代码量少
        // 2. 由于动态路由渲染的是同一个home组件,所以home组件不再销毁,当然也不再创建,复用了之前的组件,性能高;但是生命周期的钩子函数也不再执行;
        let routes  =[
            {path:"/home/:id",component:home}
        ];
        let router = new VueRouter({
            routes
        })
        let vm = new Vue({
            el:"#app",
            data:{
            },
            router
        })
    

2.query传参 这个用path传参,params传参 这个用name传参,通过冒号传的参都放在这个属性上了

  let home = {
            methods: {
                goList() {
                    // push("/list")
                    // push({path:"",query:{}})
                    //this.$router.push({path:"/list",query:{id:100}})//push也可以传参,可以传路径,也可以传对象
                    this.$router.push({ name: "second", params: { id: 500 } })

                }
            },
            template: "<div>首页<button @click='goList'>去列表</button></div>"
        }
        let list = {
            created() {
                //let id = this.$route.query.id;
                console.log(this.$route.params.id);
            },
            template: "<div>列表页</div>"
        }
        let routes = [
            { path: "/home", component: home, name: "first" },
            { path: "/list", component: list, name: "second" }

        ];
        let router = new VueRouter({
            routes
        })
        let vm = new Vue({
            el: "#app",
            data: {

            },
            router
        })

query传参通过path跳转,params传参通过name跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值