vue组件插槽与作用域插槽

1、在组件中加入自定义的html

slot标签为vue中特有标签,意为插槽,是指在组件中可以自定义插入dom;

//使用组件:
<box-content>
    <div slot="header">header</div>
    <div slot="footer">footer</div>
</box-content>


//组件实现:
Vue.component('box-content',{
    template:`<div>
        <slot name="header"></slot>
        <div class="main">main</div>
        <slot name="footer"></slot>
    </div>`,
    data:function () {
        return{}
    },
    props:{

    }
});

2、作用域插槽

组件插槽中数据显示形式由父组件决定;:slot="main"为插槽名称,slot-scope="scope"自定义作用域名称,可随意定义

//使用组件
<tem-slot>
    <template slot="main" slot-scope="scope">
        <h3>{{scope.title}}</h3>
        <table>
            <tbody>
             <tr v-for="(item,index) in scope.data"><td>{{item}}</td></tr>
            </tbody>
        </table>
    </template>
</tem-slot>


//组件实现:
    Vue.component('tem-slot',{
        template:  `<div class="tem-slot">
        <slot name="main"
        :data="rows"
        :title="title"></slot>
    </div>`,
        data:function () {
            return{
                rows:[1, 2, 3, 4, 5],
                title:'title'
            }
        },
    });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2中的插槽分为默认插槽、具名插槽作用域插槽三种类型。 默认插槽是指没有被包裹在具名插槽中的内容,可以通过在父组件中使用<slot>标签来使用默认插槽。 具名插槽是指被包裹在<template>标签中,并且带有name属性的内容。可以在父组件中使用<slot>标签的name属性来使用具名插槽作用域插槽是指可以将子组件中的数据传递到父组件中进行处理的插槽。可以通过在子组件中使用<slot>标签,并且在标签中使用slot-scope属性来定义作用域插槽。在父组件中使用<template>标签,并且在标签中使用v-slot属性来使用作用域插槽。 下面是一个使用具名插槽作用域插槽的例子: ```html <!-- 子组件 --> <template> <div> <h2>子组件</h2> <slot name="header"></slot> <ul> <li v-for="item in list" :key="item">{{ item }}</li> </ul> <slot name="footer" :list="list"></slot> </div> </template> <script> export default { name: 'ChildComponent', props: { list: { type: Array, default: () => [] } } } </script> <!-- 父组件 --> <template> <div> <h2>父组件</h2> <ChildComponent :list="list"> <template v-slot:header> <h3>这是子组件的头部</h3> </template> <template v-slot:footer="slotProps"> <h3>这是子组件的尾部</h3> <p>列表长度:{{ slotProps.list.length }}</p> </template> </ChildComponent> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { name: 'ParentComponent', components: { ChildComponent }, data() { return { list: ['item1', 'item2', 'item3'] } } } </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值