Vue 插槽 slot

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        <div_box>aaa</div_box>
        </br>
        <div_box2>
            <template v-slot:header>
                <h1>header</h1>
            </template>
            <template v-slot:content>
                <h2>main</h2>
            </template>
            <template v-slot:footer>
                <h3>footer</h3>
            </template>
            <template v-slot:default>
                <h4>default</h4>
            </template>
        </div_box2>
        </br>
        <div_box3 v-show="isShow"><!-- 使用app中的isShow -->
            <template v-slot:default="slotProps">
                <span>{{slotProps.data.join("-----;")}}</span>
            </template>
        </div_box3>
        </br>
    </div>
    <template id="div_box">
        <div style="background-color: red;height: 200px;height: 200px;">
            <button @click="btnClick">btn</button>
            <slot></slot><!-- 插槽写入调者的html -->
        </div>
    </template>
    <template id="div_box2">
        <div style="background-color: red;height: 200px;height: 200px;">
            <header>
                <slot name="header">header</slot>
            </header>
            <main>
                <slot name="content">main</slot>
            </main>
            <footer>
                <slot name="footer">footer</slot>
            </footer>
        </div>
    </template>
    <template id="div_box3">
        <div style="background-color: red;height: 200px;height: 200px;">
            <slot :data="nameArr">
                <ul>
                    <li v-for="name in nameArr">{{name}}</li>
                </ul>
            </slot>
        </div>
    </template>
    <script src="js/vue.3.2.2.js"></script>
    <script>
        const Box = {
            //用于接收数据
            // props:['brand','colleges'],
            template:'#div_box',
            methods:{
                btnClick(){
                    console.log("btnClick");
                    // this.$emit('div_box_click','test_msg1','test_msg2','test_msg3');
                    const args = {
                        name:'subject',
                        intro:'java,vue'
                    }
                    this.$emit('div_box_click',args);
                }
            }
        }
        const Box2 = {
            //用于接收数据
            // props:['brand','colleges'],
            template:'#div_box2',
            methods:{

            }
        }
        const Box3 = {
            data(){
                return{
                    isShow:false,
                    nameArr:["张三","李四"]
                }
            },
            //用于接收数据
            // props:['brand','colleges'],
            template:'#div_box3',
            methods:{

            }
        }
        // 1、创建Vue的实例对象
        const app = Vue.createApp({
            data(){//定义数据
                return {
                    msg:'你好!',
                    isShow: true
                }
            },
            components:{
                'div_box':Box,
                'div_box2':Box2,
                'div_box3':Box3
            }
        }).mount('#app');
    </script>
</body>
</html>

 

posted @ 2021-08-21 18:18  残星  阅读(37)  评论(0编辑  收藏  举报