组件的插槽以及组件通信

news2024/11/27 12:59:05

组件的插槽以及组件通信

  • 1. 插槽
    • 1.1. 单个插槽
    • 1.2. 多个插槽
  • 2. 组件通信
    • 2.1. 属性绑定
    • 2.2. 事件绑定(重点)
    • 2.3. 获取组件实例

1. 插槽

在自定义组件的 wxml 结构中,可以提供一个 节点(插槽),用于承载组件使用者提供的 wxml 结构。

1.1. 单个插槽

在小程序中,默认每个自定义组件中只允许使用一个 进行占位,这种个数上的限制叫做单个插槽

组件(子组件):

<view>
    组件自定义文字(由组件自己提供)
    <slot></slot>
</view>

页面(父组件)

<my-test4>
    <view>插槽内容(使用者提供)</view>
</my-test4>

1.2. 多个插槽

使用多个插槽,需要在组件的.j配置文件中options开启配置项(multipleSlots:true)。

  1. 开启多个插槽:
// components/test4/test4.js
Component({
    options:{
        // 开启多个插槽
        multipleSlots:true 
    },
  //...
})
  1. 定义多个插槽和使用多个插槽
    组件拥有多个插槽时,可以在slot标签上使用name属性来进行区分不同的插槽。
<view>
  组件自定义文字(由组件自己提供)
  <slot name="title"></slot>
  <slot name="left"></slot>
  <slot name="right"></slot>
</view>

使用组件时,需要通过标签的slot属性指定对应插槽的name值。

<my-test4>
  <!-- 插槽内容(使用者提供) -->
  <view slot="title">标题</view>
  <view slot="left">左边</view>
  <view slot="right">右边</view>
</my-test4>

在这里插入图片描述

2. 组件通信

组件之间通信的三种方式:属性绑定(父->子),事件绑定(子->父),获取组件实例(父组件获取子组件的实例对象)

  1. 属性绑定
    用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容的数据
  2. 事件绑定
    用于子组件向父组件传递数据,可以传递任意数据
  3. 获取组件实例
    父组件还可以通过 this.selectComponent() 获取子组件实例对象这样就可以直接访问子组件的任意数据和方法

2.1. 属性绑定

属性绑定用于父向子传值,而且只能传递普通类型的数据,无法将方法传递给子组件。
简单理解,属性绑定就是将父组件的data中的值,直接绑定到使用的标签上。

  1. 父组件的属性绑定

父组件的.js文件

data:{
  count:0
}

父组件的.wxml文件------对子组件进行属性绑定

<my-component1 count="{{count}}"></my-component1>
  1. 子组件获取父组件的属性

子组件要想获得父组件通过属性绑定的值的话,首先得在子组件的properties节点中声明同名的属性,然后才能使用。
子组件的.js文件

Component({
  properties:{
    count: Number
  },
  methods: {
      // 按钮触摸事件,对count加一操作
      addCount(){
          this.setData({
              count:this.properties.count+1
          })
      }
    }
  //....
})

子组件的.wxml结构

<view>子组件获取到父组件的count值:{{count}}</view>
<button bindtap="addCount">+1</button>

2.2. 事件绑定(重点)

事件绑定用于实现子向父传值,可以传递任何类型的数据。

事件绑定步骤如下:

  1. 在父组件的 js 中,定义一个函数,这个函数将通过自定义事件的形式,传递给子组件。
  2. 在父组件的 wxml 中,通过自定义事件的形式,将步骤1中定义的函数引用,传递给子组件。
  3. 在子组件的 js 中,通过调用 this.triggerEvent('自定义事件类型名称',{/*参数对象*/})将数据发送到父组件
  4. 在父组件的 js 中,通过 e.detail 获取到子组件传递过去的数据

示例如下:

  1. 在父组件的js中,定义一个函数,用于一会儿的自定义事件
Page({
    // 属性绑定 
    data: {
      count:0
    },
    // 定义函数----用于自定义事件
    syncCount(){}
})
  1. 给组件标签绑定设定自定义事件
<!-- 自定义事件绑定 sync 为自定义事件类型,syncCount 为自定义事件名 -->
<my-test5 count="{{count}}" bind:sync="syncCount" ></my-test5>
<view>======================</view>
<view>(页面中)count的值是{{count}}</view>
  1. 调用子组件的 this.triggerEvent() 然后发送数据到父组件
// components/test5/test5.js
Component({
    /**
     * 组件的属性列表
     */
    properties: {
        count:Number
    },

    /**
     * 组件的方法列表
     */
    methods: {
        addCount(){
            this.setData({
                count:this.properties.count+1
            })
            // 触发自定义事件,将数据同步给父组件
            this.triggerEvent('sync',{
                value:this.properties.count
            })
        }
    }
})
  1. 通过 e.detail 获取子组件传递过去的数据
Page({
    // 属性绑定 
    data: {
      count:0
    },
    // 定义函数----用于自定义事件
    syncCount(e){
    	console.log(e)
      this.setData({
          count:e.detail.value
    	})
    }
})

2.3. 获取组件实例

可在父组件里调用 this.selectComponent(“id或class选择器”) ,获取子组件的实例对象,从而直接访问子组件的任意数据和方法。
调用时需要传入一个选择器,this.selectComponent(“.my-component”)。

父组件的.wxml

<my-test5 count="{{count}}" bind:sync="syncCount" class="my-test5" id="t5"></my-test5>
<view>======================</view>
<view>(页面中)count的值是{{count}}</view>
<button bindtap="getChild">获取组件实例</button>

父组件的.js

// pages/home/home.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    count:0
  },

  syncCount(e){
    console.log(e)
    this.setData({
        count:e.detail.value
    })
  },
   // 获取组件实例函数
  getChild(){
      // 只能是id 选择器或者类选择器
      const child = this.selectComponent('.my-test5')
      console.log(child)
    	// 调用子组件的addCount方法
      child.addCount()
  },

})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/753203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023WAIC大会后记:我们距离AGI还有多远?

只有解决了算力问题&#xff0c;才能离大模型的商业化之路更进一步&#xff0c;等等问题&#xff0c;都在成为当下限制我们想象力的关键因素。继2023世界人工智能大会后&#xff0c;大模型还有多少想象力&#xff1f; 作者|思杭 编辑|皮爷 出品|产业家 1亿用户&#xff0…

当用AopContext.currentProxy()方式调用@Asyn注解的方法,发现不起作用了

1、前言 遇到到平常一些spring相关调用错误浅浅记录下 2、我们常常会用到在一个类的方法内部会去调用本类的别一个方法 我们常常会用到在一个类的方法内部会去调用本类的别一个方法&#xff0c;示例如下&#xff1a; public interface ITestAsy {String funttion1();String…

pycharm新建分支并提送至GitHub

文章目录 前言pycharm创建本地分支Push至远程分支 前言 当我们写的项目代码越来越多时&#xff0c;一个master分支无法满足需求了&#xff0c;这个时候就需要创建分支来管理代码。 创建分支可以快速的回滚到某个节点的版本&#xff0c;也可以多个开发者同时开发一个项目&#…

css:横向滚动布局

效果&#xff1a; 实现代码&#xff1a; <template><div class"index_div"><div class"container"><div class"flexBox"><div class"flex_item" v-for"item in topMenu" :key"item.id&quo…

五种不同自动化测试模型的基本介绍

随着移动互联网的发展&#xff0c;软件研发模型逐步完善&#xff0c;软件交付质量越来越受到软件公司的重视&#xff0c;软件测试技术特别是自动化测试技术开始在软件系统研发过程中发挥着越来越重要的作用。 与传统的手工测试技术相比&#xff0c;自动化测试具备了良好的可操…

模拟实现浏览器自带的 ctrl+f 搜索功能

主要利用的就是元素的innerHtml&#xff0c;通过replace方法&#xff0c;把文本替换为带标签的文本&#xff0c;然后就有样式了 下图贴出 主要代码及效果 <template><div class"search-page"><el-input style"width: 200px" v-model"…

2023年信号处理与机器学习国际研讨会(WSPML 2023)| SPIE独立出版 快速稳定

会议简介 Brief Introduction 2023年信号处理与机器学习国际研讨会(WSPML 2023) 会议时间&#xff1a;2023年9月22 -24日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;www.wspml.org 2023年信号处理与机器学习国际研讨会(WSPML 2023) 由西安交通大学、重庆大学光电技术及…

【学术小白如何写好论文】研究结论:结论vs结论

文章目录 一、引言二、研究结论的重要性三、研究结论的切入口&#xff08;1&#xff09;这个结论与前人研究的对话&#xff08;2&#xff09;这个研究结果本身的意义所在 四、注意事项&#xff08;1&#xff09;清楚区别&#xff08;2&#xff09;对结论的深入解析&#xff08;…

Lua脚本本地调试

这里主要使用日志的方式进行debug 环境依赖 项目对openresty包的依赖比较高&#xff0c;所以环境基础都在openresty下进行 openresty的使用 openresty下载地址 下载完成后解压&#xff0c;具体使用方式和nginx没有什么区别&#xff0c;主要依赖文件是一下几个 nginx.exe …

qt开发技巧之嵌入式linux点击触发两次

1.问题 移植qt5.12.9到嵌入式linux系统&#xff0c;tslib作为触摸输入&#xff0c;开发平台是imx6ull&#xff0c;点击pushbutton按钮会出现触发两次点击的情况。 2.解决 vi /etc/profile&#xff0c;在 /etc/profile里添加环境变量&#xff0c;禁止QT自带输入检测&#xff0…

数据结构---手撕图解堆的实现和TopK的应用

文章目录 重要的概念树的存储方式顺序存储链式存储 堆的概念堆的实现向上调整算法一些实现过程中的技巧实现搭建堆实现出堆的操作向下调整算法 堆排序TopK 重要的概念 要讲到堆&#xff0c;先要说两个关于二叉树的概念 满二叉树&#xff1a;一个二叉树如果每一层的节点数都是最…

ylb_学习笔记02

1.随机4位数&#xff1a; String random RandomStringUtils.randomNumeric(4);System.out.println("注册验证码的随机数 random"random);2.使用http时判断响应的状态为ture&#xff08;200&#xff09;&#xff1a; response.getStatusLine().getStatusCode() Htt…

在阿里云linux上安装MySql数据库

我们先远程连接服务器 然后输入 sudo yum update重新运行一下 然后 sudo yum install mysql-server安装 mysql 服务 其中有两次 y n 选择 都选y就好了 然后 运行 sudo service mysqld start启动MySql 然后 我们查看一下MySql sudo service mysqld status

谷歌浏览器,网站多账号登陆的方法

在测试系统某些功能的时候&#xff0c;不同的模块&#xff0c;需要不同的权限&#xff0c;所以需要登陆不同的账号&#xff0c;以下有两种办法&#xff0c;可以快速切换账号方便进行测试。 1&#xff0c;使用SessionBox插件 SessionBox是一款可以方便地切换网站的session&…

Android开发笔记

一、知识点 1、Notification 通知的创建流程 1&#xff09;创建一个NotificationManager&#xff0c;获取系统服务&#xff0c;getSystemService()方法&#xff1b; 2&#xff09;使用Builder构造器来创建Notification对象&#xff0c;设置通知的各种属性&#xff1b; 3&#…

postgresql还原bak

1、第一步肯定是要新建自己还原的目标数据库&#xff0c;例如&#xff1a; 2、进入postgresql的安装目录下的bin目录下 然后地址栏输入cmd进入命令 输入以下 psql -h localhost -U postgres -p 5432 -d SamsinoYardStandard_karamay -f "D:\desktop\zk\20230628.bak&quo…

CEO对今天的CIO们真正的要求是什么?

在当今数字化和信息时代&#xff0c;企业的首席信息官&#xff08;CIO&#xff09;的角色变得至关重要。CIO不仅需要具备深厚的技术知识&#xff0c;还需要在商业战略、创新和领导力方面展现出卓越的能力。作为企业的首席执行官&#xff08;CEO&#xff09;&#xff0c;他们对C…

【Distributed】分布式Ceph存储系统

文章目录 一、存储基础1. 单机存储设备1.1 DAS1.2 NAS1.3 SAN1.4 单机存储的问题1.5 商业存储解决方案 2. 分布式存储&#xff08;软件定义的存储 SDS &#xff09;分布式存储的类型 3. Ceph 简介4. Ceph 优势5. Ceph 架构6. Ceph 核心组件7. OSD 存储后端7.1 Filestore7.2 Blu…

单轴机器人的结构与特点

单轴机器人是由马达驱动的移动平台&#xff0c;由滚珠螺杆和 U型线性滑轨导引构成&#xff0c;其滑座同时为滚珠螺杆的驱动螺帽及线性滑轨的导引滑块&#xff0c;可用半导体、光电、交通运输业、环保节能产业、精密工具机、机械产业、智慧自动化、生技医疗上。 相对于传统的模组…

Yalmip工具箱使用教程(1)-入门学习

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;YALMIP 1.Yalmip工具箱的下载与安装 1.1下载 Yalmip的作者是Johan Lfberg&#xff0c;是由Matlab平台编程实现的一个免费开源数学优化工具箱&#xff0c;在官网上就可以下载。官方下载…