默认情况下,一个组件的wxml中只能有一族搏个slot。需要使用多slot时,可以在组件谈雀js中声明启用
需要使用多slot时,可含穗早以在组件js中声明启用
具名插槽
此时,可以在这个组件的wxml中使用多个slot,以不同的 name 来区分。
下图是小程序 小米Lite 的 Tab 切换效果:切换 Page 时,Tab 下方的指示器(红色横条)是没有滚动效果而是直接闪现到下一个 Page 的,这也是市面上小程序常见的 Tab 切换效果。
原生端 TabLayout 常见的功能就是我们的目标效果,所以 目标效果 如下:
通过了解小程序组件及技术支持,选定通过 scroll-view 、swiper 、swiper-item 、movable-area 、movable-view 配合 插槽 和 抽象节点 来实现自定义组件 tab-layout 。
具体如下图所示 :
主要实现(点击跳转查看源码)
1.复制 tab-layout 组件到项目中 (点击跳转至源码 TabLayout 目录)
4.在布局文件中使用 TabLayout 组件,并通过抽象节点 generic:item-tab 和 generic:item-page 分别与自定义的 Tab 和 Page 绑定
5.使用自闹纯定义属性 indexAreaHeight 为 Index 及其活动区域设置高度
6.使用自定义属性 tabList 设置数据源,根据数据源将自动生成对应数量的乱举 Tab 和 Page
7.按需选择可采用插槽 slot = "index" 或自定义属性 indexStyle 设置 Index 的样式
布局文件 index.wxml 中:
样式文件 index.wxss 中
布局文件 index.wxml 中
PS: 还有一个很重要的方法 onPageUpdata ,用于抽象节点 item-tab 和 item-page 通知父节点 tab-layout 刷新数据,在子控件中通过 this.triggerEvent("updata") 触发
可能出现问题:
1. 当 item-page 中存在竖直滚动的 scroll-view 时出现滑动冲突哗弯碧该如何解决?
在 item-page 组件 attached 方法中按需为 scroll-view 设置固定高度或占满屏幕剩余位置 (点击跳转查看参考写法)
2.当 item-page 或 item-tab 中调用 this.setData ( ) 之后,发现自定义属性 item 获取值为 null ?
出现该种情况,应在 this.setData ( ) 之后,执行 this.triggerEvent("updata") 触发 tab-layout 的 onPageUpdata 方法重新得到 item 值
3.如何实现 " 懒加载 " ,即当 Tab 首次被选中时,才进行对应 Page 的数据加载?
为自定义组件 item-page 设置一个懒加载标志位暂定为 isLoadData ,通过订阅自定义属性 currentIndex ,在 currentIndex 属性变化或组件进行到 attached 生命周期时,通过判断 isLoadData 和 currentIndex 是否与 position 相等来进行数据加载并调整标志位 (点击跳转查看参考写法)
在小程序越来越普及的现状下,如何使得小程序能给用户带来更完善的显示效果和使用体验,是每一个开发者都应该力尽其责的事。鉴于本人当前对小程序和网页端的熟悉程度,该组件或许还存在很多瑕疵,如有更好的见解或建议,欢迎留言。
解释 :
在组件的视图模板中可以通过 slot 声明一个插槽的位置,其位置的内容可以由外层组件或者页面定义。
示例:
通过 name 属性可以给 slot 命名。一个视图模板的声明可以包含一个默认 slot 和多个命名 slot。外层组件或页面的元素通过 slot=”name” 的属性声明,可以指定自身的插入族明汪点。
示例:
slot指令应用
解释:
在 slot 声兆仔明时应用 if 或 for 指令,可以让插槽根据组件数据动态化。
示例:
数据环境
解释:
插入 slot 部分的内容,其数据环境为声明时的环境(也就是调用该组件页的环境)
渲染结果
scoped 插槽
解释:
如槐大果 slot 声明中包含 s-bind 或 1 个以上 var- 数据前缀声明,该 slot 为 scoped slot。scoped slot 具有独立的 数据环境。
scoped slot 通常用于组件的视图部分期望由 外部传入视图结构,渲染过程使用组件内部数据。( 个人理解:有了scope就优先使用组件内部的数据,除非内部没有这个数据,才会使用外部传入的数据。 )
渲染结果:
组件样式
组件的样式,可以在组件的 css 文件中编写,并且只对当前组件内节点生效。使用时,需要注意以下几点:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)