父子组件之间的传值问题

父组件给子组件传值

父组件给子组件传值需要通过属性传递,子组件通过props以数组的形式传递。

<body>
    <div id="root">
        <child :content="123"></child>
    </div>
    <script>
        Vue.component('child',{
            props:['content'],
            template:'<div>{{content}}</div>'
        })
        var vm = new Vue({
            el: '#root',
        })
    </script>
</body>
复制代码

那么,父组件传过来的值,如果想指定类型或者做限制怎么办?

<body>
    <div id="root">
        <child :content="123"></child>
    </div>
    <script>
        Vue.component('child',{
            props:{
                content: String
            },
            template:'<div>{{content}}</div>'
        })
        var vm = new Vue({
            el: '#root',
        })
    </script>
</body>
复制代码

如上所示,可以通过对象形式,将值指定为string。显然上例中123是数字(因为content前面加了冒号),就会报错。如果想指定为数字或字符串怎么办?

<body>
    <div id="root">
        <child :content="123"></child>
    </div>
    <script>
        Vue.component('child',{
            props:{
                content: [String,Number]
            },
            template:'<div>{{content}}</div>'
        })
        var vm = new Vue({
            el: '#root',
        })
    </script>
</body>
复制代码

还想更进一步的限制值怎么办?

<body>
    <div id="root">
        <child content="hello world"></child>
    </div>
    <script>
        Vue.component('child',{
            props:{
                content: {
                    type:String,
                    // content不一定非要传值,true的话就一定要
                    required: false,
                    // 定义默认值,当content没值的时候会使用
                    default 'default value'
                }
            },
            template:'<div>{{content}}</div>'
        })
        var vm = new Vue({
            el: '#root',
        })
    </script>
</body>
复制代码

除了限制是否要传值,值类型和默认值以外,还能限制传值长度:

<body>
    <div id="root">
        <child content="hello world"></child>
    </div>
    <script>
        Vue.component('child',{
            props:{
                content: {
                    type:String,
                    // required: false,
                    // // 定义默认值,当content没值的时候会使用
                    // default 'default value',
                    validator: function (value) {
                        return (value.length>5)
                    }
                }
            },
            template:'<div>{{content}}</div>'
        })
        var vm = new Vue({
            el: '#root',
        })
    </script>
</body>
复制代码

转载于:https://juejin.im/post/5ca6e009f265da30a3303f68

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值