位置: IT常识 - 正文

微信小程序 slot插槽基本使用(微信小程序slot)

编辑:rootadmin
微信小程序 slot插槽基本使用 文章目录前言一、基本插槽二、具名插槽三、样式:hoststyleIsolation可控化样式隔离externalClasses外部样式类使用页面/父组件的样式总结前言

推荐整理分享微信小程序 slot插槽基本使用(微信小程序slot),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:微信小程序slot警告,微信小程序 slider,微信小程序slot标签,微信小程序slot传值,微信小程序 slot中 不解析标签,微信小程序slot警告,微信小程序 slot中 不解析标签,微信小程序slot传值,内容如对您有帮助,希望把文章链接给更多的朋友!

小程序中, 如果插槽有必要拿到父组件的数据来展示, 直接父传子即可, 和Vue一样的思路

一、基本插槽

参考Vue的基本插槽, 两者的使用思路相同. 子组件开一个<slot>标签表示插槽, 父组件直接在子组件标签之间写入要插入的内容, 这些内容就会自动插入到子组件的第一个基本插槽中, 注意是第一个, 就下面这个例子就可以看出:

<!-- 子组件.wxml --><view class="box"> <slot></slot> <!-- 基本插槽1 --> <view wx:for="{{list}}" wx:key="item" >{{item}}</view> <slot></slot> <!-- 基本插槽2 --></view>

虽然这里使用了多个插槽, 但是子组件js里加不加这段无所谓, 因为最终是只有一个插槽, 但是多个具名插槽就要加了, 不然所有具名失效:

//子组件.jsComponent({ options: { multipleSlots: true // 复数插槽: 是 }})

json里规定该目录下作为组件使用而非页面:

//子组件.json{ "component": true, //作为组件: 是 "usingComponents": {}}

不加也不会报错, 但所有插槽都是无效的.

之后在父组件里引入子组件:

//父组件.json{ "usingComponents": { "navbar": "../../components/NavBar/NavBar" }}<!-- 父组件.wxml --><navbar model:list="{{datalist}}"> <view> <text>slot啊</text> </view></navbar>

这个Navbar使用了弹性布局, 如果两个插槽均能成功插入, 那么navbar左右应当各有一个"slot啊". 自上而下解析, 只有第一个插槽被插入内容:

这点和Vue不同, 在Vue中出现多个基本插槽时, 父组件传入的内容会整体、完好的插入每一个插槽, 我在《Vue3 插槽使用详解》中做过详细演示. 个人感觉这样不是很好.

二、具名插槽

和Vue的具名插槽很像(怎么又像…), 至少使用上很像. 使用name属性在子组件里给插槽起名, 父组件进行内容插入时使用slot属性指定这部分内容要插入哪个插槽:

<!-- 子组件wxml --><view class="box"> <slot name="before"></slot> <view wx:for="{{list}}" wx:key="item">{{item}}</view> <slot name="after"></slot></view>

1个以上具名插槽就一定要加这个了:

//子组件.jsComponent({ options: { multipleSlots: true // 在组件定义时的选项中启用多 slot 支持 }})

然后到父组件引入试一下:

<navbar model:list="{{datalist}}"> <view slot="before"> <text>slot:before</text> </view> <view slot="after"> <text>slot:after</text> </view></navbar>

看下效果, 一个在Navbar主体前, 一个在navbar主体后:

微信小程序 slot插槽基本使用(微信小程序slot)

emmm… 突然有个疑问, 要是把两个兄弟元素都规定插入同一个插槽, 会出现什么情况? 会按序插入, 还是我想的那样直接覆盖呢… 父组件分两次传给before插槽试一下:

<!-- 父组件.wxml --><navbar model:list="{{datalist}}"> <view slot="before"> <text>slot:before |</text> </view> <view slot="before"> <text>slot:after</text> </view></navbar>

可见并不会覆盖, 而是按照传入的先后顺序依次排列, 相当于一次性传入.

三、样式

组件现在可以设置自己内部的默认样式了, 按照Vue的思想, 即便向组件插槽内传入内容, 组件的样式也不会影响到插槽内容的样式, 但是现在这种隔离变得更加可控.

:host

通过wxss选择器:host实现规定当前子组件内的默认样式, 并且可以影响到传入子组件插槽的内容: 举例:

/* 子组件.wxss */.active { /* 活跃的navbarItem字体为亮绿色 */ color: lightgreen;}/* 组件内所有文字默认粉色 */:host { color: pink;}

然后我们还是用具名插槽传那俩值, 看下效果, 此时"衣服"选项活跃:

styleIsolation可控化样式隔离

允许直接开发者直接控制父子组件之间的样式分享规则; 直接放在子组件json里使用, 就像这样:

{ "component": true, "usingComponents": {}, "styleIsolation": "shared"}属性说明“styleIsolation”: “isolated”启用样式隔离, 父子组件互不影响(默认)“styleIsolation”: “apply-shared”父组件样式将影响子组件, 但子组件不影响父组件“styleIsolation”: “shared”分享, 互相影响

就拿"styleIsolation": "shared"举个例子, 我在父组件的WXSS中, 指定一个子组件元素的样式:

/* 父组件WXSS, 子组件中类名为box的元素 */.box { background-color: yellow;}<!-- 子组件 --><view class="box"> <slot name="before"></slot> <!-- 略 --> <slot name="after"></slot></view>

externalClasses外部样式类

将子组件内部元素的类名暴露, 允许在父组件内传入子组件内部元素类名. 比如子组件里有个长100px宽100px的div, 使用外部样式类可以做到由父组件传入一个类名, 实现父组件类名设置为子组件div的样式.

//子组件Component({ externalClasses: ['my-class']})<!-- 子组件 --><view class="my-class">这段文本的颜色由组件外的 class 决定</view>/* 父组件样式 */.red-text { color: red;}<!-- 父组件 --><my-component my-class="red-text" />

当然也可以看到, 在子组件内部这就是一个普通的类名, 那么是不是也可以在子组件wxss里使用它呢:

在既由外部传入又有自身样式的情况下, 样式类的优先级是未被定义的, 也就是说会出现覆盖情况?那么是个别样式的覆盖还是对于整个样式类的覆盖呢, 我试了一下: 根据结果来看, 其实只要将一个子组件类名指定为externalClasses, 它就不可再作为普通类名使用, 而且原因应该也不是产生了样式类覆盖, 因为父组件不给子组件传类名的情况下, 被指定为externalClasses的类名也不可以作为普通类名使用, 它根本不生效:

<view class="my-class">子组件</view>//子组件js, 将my-class指定为externalClasses.Component({ externalClasses: ['my-class']})/* 子组件样式 */.my-class { height: 100px; width: 100px; color: yellow; background-color: aqua;}

然后直接来看父组件不传类名的情况:

<!-- 父组件中引入的子组件 --><my-component />

可以明显看到的是没有颜色, 说明即便父组件不传入类名, my-class也不再能作为普通类名使用了.

使用页面/父组件的样式

在配置了父子组件存在样式隔离的情况下, 出现子组件需要使用父组件或页面的样式类的需求, 可以使用这个. 通过在类名添加步骤进行一些额外操作来完成:

<!-- 使用引入页面的类 --><view class="~blue-text"> 这段文本是蓝色的 </view><!-- 使用父组件的类 --><view class="^red-text"> 这段文本是红色的 </view>总结

还好有用过Vue, 学起来比较清晰. 文档最下面还有一个虚拟化组件节点, 这个本文没有提到.

本文链接地址:https://www.jiuchutong.com/zhishi/297328.html 转载请保留说明!

上一篇:实用工具推荐,浏览器必备宝藏插件:Wetab新标签页(实用工具书推荐)

下一篇:JavaScript | 1000个判断条件难道要写了1000个 if ? 一文教你如何实现分支优化

  • 不用直通车照样打造爆款(直通车不开创意可以吗)

    不用直通车照样打造爆款(直通车不开创意可以吗)

  • 趁着年轻,赶紧去实现你的梦想(趁着年轻赶紧挣钱)

    趁着年轻,赶紧去实现你的梦想(趁着年轻赶紧挣钱)

  • 苹果13promax怎么设置返回键(苹果13promax怎么显示电池电量百分比)

    苹果13promax怎么设置返回键(苹果13promax怎么显示电池电量百分比)

  • qq课程回放多久生成(qq课堂回放有时间限制吗)

    qq课程回放多久生成(qq课堂回放有时间限制吗)

  • 滴滴随机幸运奖是怎么回事(滴滴随机幸运奖触发条件)

    滴滴随机幸运奖是怎么回事(滴滴随机幸运奖触发条件)

  • vivo x21多重(vivox21多重)

    vivo x21多重(vivox21多重)

  • 陌陌里的礼物收益如何注销(陌陌里的礼物收益怎么清零)

    陌陌里的礼物收益如何注销(陌陌里的礼物收益怎么清零)

  • 手机网络限速了怎么办(手机网络限速了怎么设置)

    手机网络限速了怎么办(手机网络限速了怎么设置)

  • 密码加密的方式有哪些(密码加密方式是4)

    密码加密的方式有哪些(密码加密方式是4)

  • 信号栏出现HD(信号栏出现HD怎样关闭)

    信号栏出现HD(信号栏出现HD怎样关闭)

  • 惠普e管家可以卸载吗(惠普E管家可以帮忙下载软件吗)

    惠普e管家可以卸载吗(惠普E管家可以帮忙下载软件吗)

  • rtx3000显卡什么级别

    rtx3000显卡什么级别

  • 淘宝直通车是哪种计费方式(淘宝直通车哪种推广比较好)

    淘宝直通车是哪种计费方式(淘宝直通车哪种推广比较好)

  • 一按空格键后面的字就没了(一按空格键后面的字间距就变大了)

    一按空格键后面的字就没了(一按空格键后面的字间距就变大了)

  • 博弈属于计算机在人工智能方面的应用吗(计算机中的博弈是什么意思)

    博弈属于计算机在人工智能方面的应用吗(计算机中的博弈是什么意思)

  • 美篇打不开怎么回事(美篇怎么了?无法打开)

    美篇打不开怎么回事(美篇怎么了?无法打开)

  • 屏幕老化什么意思(屏幕老化是什么)

    屏幕老化什么意思(屏幕老化是什么)

  • word页面缩小了怎么恢复(word页面小了怎么回事)

    word页面缩小了怎么恢复(word页面小了怎么回事)

  • 华为gt2代什么时候上市(华为gt2多久发布的)

    华为gt2代什么时候上市(华为gt2多久发布的)

  • 华为mate30出厂自带有钢化膜吗(mate30出厂有哪些软件)

    华为mate30出厂自带有钢化膜吗(mate30出厂有哪些软件)

  • u盘中病毒了能插电脑吗(u盘中病毒能修好吗)

    u盘中病毒了能插电脑吗(u盘中病毒能修好吗)

  • iphone11输入法怎么移动光标(iphone11输入法怎么清除数据)

    iphone11输入法怎么移动光标(iphone11输入法怎么清除数据)

  • 联动云怎么启动视频(联动云怎么启动了走不了)

    联动云怎么启动视频(联动云怎么启动了走不了)

  • 微信花呗收款怎么开通(微信花呗收款怎么退回)

    微信花呗收款怎么开通(微信花呗收款怎么退回)

  • ios全称(IOS全称)

    ios全称(IOS全称)

  • 在计算器上off是什么键(在计算器上off是什么)

    在计算器上off是什么键(在计算器上off是什么)

  • 微信视频怎么开美颜相机(微信视频怎么开启悬浮窗口)

    微信视频怎么开美颜相机(微信视频怎么开启悬浮窗口)

  • win11图片不显示预览图怎么办? Win11图片预览缩略图不显示的技巧(win11打开图片)

    win11图片不显示预览图怎么办? Win11图片预览缩略图不显示的技巧(win11打开图片)

  • chrt命令  实时管理进程的优先级策略(chs命令)

    chrt命令 实时管理进程的优先级策略(chs命令)

  • 个人所得税纳税记录
  • 企业为员工代扣代缴个人所得税分录
  • 小规模结转成本的会计分录怎么写
  • 个人所得税退的多好还是少好
  • 纳税申报 财务报表利润表
  • 工业企业成本核算的一般程序包括下列的
  • 核定企业的征收方式
  • 服务合同需要征税吗
  • 会员卡 退
  • 货运代理公司排名前十
  • 办公设备维修费会计分录
  • 以前年度损益调整科目怎么用
  • 工程款增值税专用发票如何开具
  • 小规模收专用发票后成为一般纳税人吗
  • 对公账户提取备用金可以每天提现嘛
  • 简述分期收款业务的处理流程
  • 企业确定无法支付的
  • 生产活动产生的正的消费外部效应
  • 因为担保被起诉怎么办
  • 年底结账时需要做账吗
  • 收到进项税额发票怎么处理
  • 采购过程中产生的物流成本案例分析
  • win10怎么接收手机热点
  • 如何安装u盘的系统
  • php中运算符
  • apache运行php
  • 税务登记 申报
  • win7系统禁用u盘
  • thinkphp curl
  • php如何自定义函数
  • php反转
  • webpack插件执行顺序
  • 出资入股是什么意思
  • 将织梦dedecms转换到wordpress
  • Vue3【Transition(效果、CSS 过渡、使用animation、TransitionGroup、 KeepAlive、Teleport )】(七)-全面详解(学习总结---从入门到深化)
  • 如何在亚马逊平台卖货
  • php文件上传操作流程图
  • ps2021和cs6有什么区别
  • 按摊余成本计量的应收账款
  • 国家给农民的青春有哪些
  • 2022年最新电脑操作系统
  • 支付工程款的会计科目怎么写
  • 零售药店可申请纳入医保定点
  • 一般纳税人和小规模纳税人的区别
  • sqlplus查询结果换行
  • 预提费用是应付账款吗
  • percona-toolkit之pt-kill 杀掉mysql查询或连接的方法
  • 如何理解合并报表编制程序中的调整与抵消处理
  • 预付款项核销
  • 应收账款对应什么会计科目
  • 发票失控进项转出所得税
  • 帮别人加工需要什么手续
  • 稀释股权违法吗
  • 年金现值系数和复利现值系数的公式
  • 技术支持费用属于什么费用
  • 公司新产品研发上市的意义和价值
  • 其他应收款属于什么会计要素
  • 会计核算和监督两项基本会计职能是相辅相成
  • win7系统安装win10 怎么安装
  • win8打开ie
  • windows8鼠标点击右键反应慢咋回事
  • win7不识别大于4T的盘
  • win7桌面图标有小方块
  • linux用户文件权限
  • 日常办公常用的批处理脚本
  • python 先序遍历
  • python里的set
  • OSG 砖块 shader 例子 GLSL
  • gdi双缓冲绘制
  • event_base_new
  • windows2008 iis
  • python ftps
  • js的select
  • uil的简单常用操作
  • python各种函数
  • fw开发
  • 莱鸟人集团
  • 广东省电子税务局app下载手机版
  • 国家税务总局吕梁市税务局官网
  • 水利基金要收滞纳金吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设