402 vue组件传参

  • 原始方式使用 $route获取
// 入口
<router-link to="/header/3">123</router-link>

// 规则
routes: [
    {
        path: '/header/:id',
        component: header,
    }
]

// 获取参数
const header = {
    template: `<p>header  {{ $route.params.id }}  </p>`
}
  • 布尔模式
// 入口
<router-link to="/header/3">123</router-link>

// 规则
routes: [
    {
        path: '/header/:id',
        component: header,
        // 如果 props 被设置为 true,route.params 将会被设置为组件属性
        props: true
    }
]

// 获取参数
const header = {
    // 参数 id 当成参数
    props: ['id'],
    template: `<p>header   {{ id }} </p>`
}
  • 对象模式
// 入口
 <router-link to="/header">123</router-link>

// 规则
 routes: [
     {
         path: '/header',
         component: header,
         props: { foo: '0000' }
     }
 ]
// 组件
 const header = {
        props: ['foo'],
        template: `<p>header   {{ foo }} </p>`
 }
  • 函数模式
// 同对象模式一样
// 区别是props值不一样
 props: to => {
     return { foo: '0000' }
 }
  • 注意 : 对象模式和函数模式,参数 在props里,所以声明式导航那里就不要传参了

11-组件传参.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>

<body>
    <!-- 
       方式1  to='/one/4'  path='/one/:id?'  组件:$route.params.id 
                                      事件 : this.$route.params.id 

       方式2 : 布尔模式  路由规则里 props:true     
              将参数id 作为组件的属性存在  
              -  props:true
              - 组件内 : props:['id']
              - 使用: {{ id }}

       方式3 :  对象模式      
              - props : { aaa : 'bbb' }
              - props: ['aaa']
              - {{ aaa }}

        方式4 :  函数模式    
               - props : to => { return { aaa : 'ccc' }  }
               - props:['aaa']
               - {{ aaa }} 
    -->

    <div id="app">
        <!-- 1. 入口 -->
        <router-link to="/one">one</router-link>

        <!-- 4. 出口 -->
        <router-view></router-view>
    </div>
    <script src="./vue.js"></script>
    <script src="./node_modules/vue-router/dist/vue-router.js"></script>
    <script>
        // 3. 组件
        const One = {
            props: ['id', 'aaa'],
            template: `<div>one组件 {{ aaa }}</div>`
        }

        //  实例化
        const router = new VueRouter({
            // 2. 规则

            routes: [
                // props : true  将id参数作为组件的属性存在
                // { path: '/one/:id', component: One, props: true }

                // 将aaa 作为 组件的属性存在
                // { path: '/one', component: One, props: { aaa: 'bbb' } }

                // 函数
                {
                    path: '/one',
                    component: One,
                    props: to => {
                        return {
                            aaa: 'ccc'
                        }
                    }
                }
            ]
        })

        const vm = new Vue({
            router,
            el: '//app',
            data: {}
        })
    </script>
</body>

</html>

posted on 2020-03-21 15:59  冲啊!  阅读(210)  评论(0编辑  收藏  举报

导航