当前位置: 首页 > article >正文

Vue3.0插槽

用法:

父组件App.vue

<template>
  <div>
    <!--将html代码插入到子组件中带默认名称的插槽中-->
    <AChild>
      <!--这段html会插入到AChild组件中<slot></slot>插槽中-->
      <!-- 注意:写在父组件中的html代码只能在父组件中被访问到,所以这段html只能在父组件中被访问:如在App.vue中获取这段html。document.getElementById("mydiv") -->
      <div id="mydiv">我是在App.vue组件中的一段HTML1</div> 
    </AChild>
    
    <!--将html代码插入到子组件中带具体名称的插槽中-->
    <AChild>
      <template v-slot="aaa">  <!--v-slot可以简写成#  如: <template #"aaa"></template> -->
        <div>我是在App.vue组件中的一段HTML1</div><!--这段html会插入到AChild组件中<slot name="aaa"></slot>插槽中-->
      </template>
    </AChild>

    <!-- 作用域插槽 -->
    <!--作用域插槽其实就是子组件提供了数据,具体数据怎么使用与渲染,由父组件来决定-->
    <AChild>
      <template v-slot:bbb="myprops">  <!--v-slot:bbb="myprops"的意思就是:在AChild子组件中定义了一个名称为bbb的插槽,这个插槽向外提供了数据,这个数据由myprops来接收。如果这个插槽没有名称就直接写成v-slot="myprops"  -->
        <button @click="handelClick(myprops)">点我</button>
        <ul>
          <li v-for="item in myprops.mylist" :key="item">{{item}}----这是由父组件重新渲染并覆盖了子组件中名字为bbb插槽中的内容</li>
        </ul>
        <div>{{myprops.mydata}}</div>
      </template>
    </AChild>
  </div>
</template>
<script>
import AChild from "./components/AChild.vue" //导入AChild组件模板
export default {
  components: {
    AChild
  },
  methods:{
    handelClick(myprops){
      console.log(myprops)
      console.log(myprops.mylist) //输出:["中国", "美国", "俄罗斯"]
      console.log(myprops.mydata) //输出:"123"
    }
  }
}

</script>

子组件AChild.vue

<template>
    <div>
        <span>我的子组件内容1</span>
        <!-- 默认插槽 -->
        <slot></slot>

        <!-- 具名插槽,即带有名称的插槽 -->
        <slot name="aaa"></slot>

        <!-- 作用域插槽 -->

        <!--向父组件暴露了两个数据,一个是mylist,另外一个是mydata,父组件收到这两个数据后可以根据实际情况来重写这个slot中的内容-->
        <slot name="bbb" :mylist="datalist" mydata="123"> 
            <ul>
                <li v-for="item in datalist" :key="item">{{ item }}</li>
            </ul>
        </slot>
    </div>
</template>
<script>
export default {
    data() {
        return {
            datalist: ["中国", "美国", "俄罗斯"]
        }
    }
}
</script>


http://www.kler.cn/a/107967.html

相关文章:

  • 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
  • 机器学习——损失函数、代价函数、KL散度
  • ubuntu cmake CPack将第三方库进行打包
  • 信号量和线程池
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】约束布局
  • JDBC-Dao层模式
  • Windows相关知识
  • 磁盘的结构(磁道,扇区,盘面,柱面,物理地址)
  • TypeScript - 字符串的字面类型
  • Android---StartActivity启动过程
  • react高阶成分(HOC)例子效果
  • 如何在vscode中添加less插件
  • 【菜菜研科研小BUG记录】【Latex写作方面1】不定期更新
  • 【开源】基于SpringBoot的计算机机房作业管理系统的设计和实现
  • 2011-2021年“第四期”数字普惠金融与上市公司匹配(根据城市匹配)/上市公司数字普惠金融指数匹配数据
  • Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(下)
  • [微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)
  • 处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术
  • 策略路由和路由策略
  • Oracle (7)Online Redo Log Files
  • centos7 install postgres-15
  • Navicat for MySQL 视图创建使用方法
  • 毅速丨金属3D打印能替代传统制造吗?
  • C++ 学习系列 -- 标准库常用得 algorithm function
  • 【LeetCode力扣】189 53 轮转数组 | 最大子数组和
  • 【深度学习】吴恩达课程笔记(一)——深度学习概论、神经网络基础