javascript - vue2 的 slot 如何传参给 子组件
迷茫
迷茫 2017-04-11 10:48:37
[JavaScript讨论组]

vue2 的 slot 如何传参给 子组件?

场景:
想当 App.vue组件 调用 Input.vue组件时, 如何通过判断 Input.vue 组件是否被 Group.vue组件 所包围时, 是否给 <input /> 标签添加一个 p(含有 '.control')标签。

问:

我如何在 Group.vue 组件的 slot 传递 is-group 属性给子组件(Input.vue)?

伪代码:

最外层组件 App.vue

<template>
    <l-input value='用户名' />
</template>

父组件 LGroup.vue:

<templale>
    <p class="control">
        <slot :is-group="isGroup"></slot>
    </p>
</template>
<script>
    export default {
        data () {
            isGroup: true
        }
    }
</script>

子组件 LInput.vue

<template>
    <template v-if="!isGroup" >
        <p class="control">
           <input type='text' :value='value' />
        </p>
    </template>
    <template>
        <input type='text' :value='value' />
    </template>
</template>

<script>
    export default {
        props: {
            value: {
                type: ''
            }
        },
        computed: {
        }
    }
</script>
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
PHP中文网

很幸運的, Vue 2 不久前推出了大家一直很想要的功能

所以可以透過這種方式傳遞:

父組件

<l-group>
    <template scope="props">
        <l-input :is-group="props.isGroup"></l-input>
    </template>
</l-group>

<l-input></l-input>

Group組件

<p class="group">
    <slot :is-group="true"></slot>
</p>

Input 子組件

Vue.component('l-input', {
    // ...略
    props: {
        isGroup: {
            type: Boolean,
            default: false
        }
    }
})

很輕鬆的達成目的。

實現 : jsFiddle


但是

如果連 props 傳遞都不想用的話,可以直接由子組件根據 $parent 取得其父組件,再判斷其組件名稱是否為 l-group 來判定當前 input 組件是否被包住了。

Input 組件

data() {
    return {
        isGroup: false
    }
},
created() {
    this.isGroup = this.$parent.$options._componentTag === 'l-group'
}

實現 : jsFiddle

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号