动态路由传参,组件 接收 传递过来的数据 的多种实现方式($route.params 、props 、props设置为对象)

1、通过$route.params来获取路径参数

 

<h2>接收到 你传递过来的值:{{$route.params.username}} --- {{$route.params.post_id}}</h2>

mounted(){
                // 从路由信息对象$route 中读取数据 -- 在脚本里写时 要带this
                console.log(this.$route.params);
                this.pid = this.$route.params.post_id;
                this.uname = this.$route.params.username;
            }

2、通过props来接收参数

注意:props在路由配置规则中 props:true 使用方法,如下所示:

 <div id="app">
        <!-- 访问组件 -->
        <router-link to="/login">登录</router-link>
        <!-- <router-link to="/user/520">用户中心</router-link> -->
        <router-link to="/user/小李子是蠢猪/520">用户中心</router-link>

        <router-view></router-view>

    </div>

    <template id="login">
        <div>
            <h1>我是login组件</h1>
        </div>
    </template>

    <template id="user">
        <div>
            <h1>我是user组件</h1>

            <h2>获取到的编号:{{id}}</h2>
            <h2>获取到的用户名是:{{username}}</h2>
        </div>
    </template>





    <script src="./js/vue.js"></script>
    <script src="./js/vue-router .js"></script>

    <script>
        // 组件
        var login = {
            template:'#login'
        };

        var user = {
            template:'#user',
            props:['id','username'],
            data(){
                return {
                    // uid:'',
                    // uname:''
                }
            },
            mounted(){
                // 从路由信息对象$route 中读取数据 -- 在脚本里写时 要带this
               console.log(this.$route);
            }
        }

        // 创建路由实例对象
        var myRouter = new VueRouter({
            mode:'history', //模式
            // 配置路由规则
            routes:[
                {
                    path:'/login',
                    component:login
                },
                {
                    // vue-router中 动态路由如何设置?
                    // 动态传参 语法:
                    // 通过 /:参数名  的形式传递参数
                    path:'/user/:username/:id',
                    component:user,
                    // 在路由配置中 添加props属性 给其设置true
                    props:true
                }
            ]
        })


        // 根组件
        var a = new Vue({
            // 模板选择器
            el:'#app',

            // 挂载路由
            router:myRouter,

            // 数据中心
            data(){
                return {

                }
            },
            // 方法中心
            methods:{

            }
        })
    </script>

预览效果:

 

3、我们可以将props设置为对象,那么就直接将对象的数据传递给组件进行使用

注意:props在路由配置规则中 props:(route)=>({}) 使用方法,如下所示:

<title>props另外一种用法</title>
</head>
<body>
    <div id="app">
        <!-- 访问组件 -->
        <router-link to="/login">登录</router-link>
        <router-link to="/user">用户中心</router-link>

        <router-view></router-view>

    </div>

    <template id="login">
        <div>
            <h1>我是login组件</h1>
        </div>
    </template>

    <template id="user">
        <div>
            <h1>我是user组件</h1>

            <h2>获取到的昵称: {{nickname}}</h2>
            <h2>获取到的用户年龄是: {{age}}</h2>
        </div>
    </template>





    <script src="./js/vue.js"></script>
    <script src="./js/vue-router .js"></script>

    <script>
        // 组件
        var login = {
            template:'#login'
        };

        var user = {
            template:'#user',
            props:['nickname','age'],
            data(){
                return {
                    // uid:'',
                    // uname:''
                }
            },
            mounted(){
                // 从路由信息对象$route 中读取数据 -- 在脚本里写时 要带this
                // 如果你在路由配置中,直接把参数写在props的箭头函数里 
                // 这些参数 不会 被存到 路由信息对象$route的 pramas 这个对象中, 此时这个对象是空
               console.log(this.$route);
            }
        }

        // 创建路由实例对象
        var myRouter = new VueRouter({
            mode:'history', //模式
            // 配置路由规则
            routes:[
                {
                    path:'/login',
                    component:login
                },
                {
                    // vue-router中 动态路由如何设置?
                    // 动态传参
                    // 此刻的 动态传参 是写在 props里的 则path里则不用写了
                    path:'/user',
                    component:user,
                    // 在路由配置中 添加props属性 给其设置true
                    // props 设置为箭头函数 在箭头函数里 写一个对象 在当前对象里 写 若干个属性
                    props:(route)=>({
                        nickname:'小李子憨憨',
                        age:66
                    })
                }
            ]
        })


        // 根组件
        var a = new Vue({
            // 模板选择器
            el:'#app',

            // 挂载路由
            router:myRouter,

            // 数据中心
            data(){
                return {

                }
            },
            // 方法中心
            methods:{

            }
        })
    </script>

 

预览效果:

4、如果想要获取传递的参数值 还想要 获取传递的对象数据,那么props应该设置为函数形式

<div id="app">
        <!-- 访问组件 -->
        <router-link to="/login">登录</router-link>
        <router-link to="/user/555">用户中心</router-link>

        <router-view></router-view>

    </div>

    <template id="login">
        <div>
            <h1>我是login组件</h1>
        </div>
    </template>

    <template id="user">
        <div>
            <h1>我是user组件</h1>

            <h2>获取到的昵称: {{nickname}}</h2>
            <h2>获取到的用户年龄是: {{age}}</h2>
            <h2>获取到的编号是: {{uid}}</h2>
        </div>
    </template>





    <script src="./js/vue.js"></script>
    <script src="./js/vue-router .js"></script>

    <script>
        // 组件
        var login = {
            template:'#login'
        };

        var user = {
            template:'#user',
            props:['nickname','age','uid'], // 这里的参数 要与下面的 props对象里的一致
            data(){
                return {
                    // uid:'',
                    // uname:''
                }
            },
            mounted(){
                // 从路由信息对象$route 中读取数据 -- 在脚本里写时 要带this
                // 如果你在路由配置中,直接把参数写在props的箭头函数里 
                // 这些参数 不会 被存到 路由信息对象$route的 pramas 这个对象中, 此时这个对象是空
               console.log(this.$route);
            }
        }

        // 创建路由实例对象
        var myRouter = new VueRouter({
            mode:'history', //模式
            // 配置路由规则
            routes:[
                {
                    path:'/login',
                    component:login
                },
                {
                    // vue-router中 动态路由如何设置?
                    // 动态传参
                    // 此刻的 动态传参 是写在 props里的 则path里则不用写了
                    // 同时 把参数 也写在 路径path上
                    path:'/user/:id',
                    component:user,
                    // 在路由配置中 添加props属性 给其设置true
                    // props 设置为箭头函数 在箭头函数里 写一个对象 在当前对象里 写 若干个属性
                    props:(route)=>({
                        nickname:'小李子憨憨',
                        age:66,
                        uid:route.params.id
                    })
                }
            ]
        })


        // 根组件
        var a = new Vue({
            // 模板选择器
            el:'#app',

            // 挂载路由
            router:myRouter,

            // 数据中心
            data(){
                return {

                }
            },
            // 方法中心
            methods:{

            }
        })
    </script>

 

预览效果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值