和 vue 的 slot 几乎是一模一样的. 这个学小程序就相当于复习了一把 vue, 还是很值的.

我们之前说组件是页面的一部分, 目的是为了代码复用, 作为组件封装者, 有时候需要设计一些让用户能自定义输入的内容, 即通过预留一些 "占位符" 空间给到用户, 那实现这种占位的设计就叫做 slot.

作为组件的使用这, 在使用组件时通过按需 "填充 slot" 则完成了自身的业务逻辑.

单个 slot

在小程序中, 默认每个自定义组件中只允许使用一个 slot 进行占位. 这种就成为单个插槽.

<!-- 1.组件的封装者, 假设组件名叫 cj -->

<view>
<view>我是组件的内部节点</view>
<!-- 对于未知内容可用 slot 进行占位, 内容由用户决定 -->
<slot></slot>
</view> <!-- 2.组件的使用者, 给组件传一个 "hello, youge" 的内容 --> <cj>
<!-- 这个 view 的区域会替换掉组件的 slot 区域 -->
<view>hello, world</view>
</cj>

这一看就秒懂. 俺之前学 vue 的时候对这个 slot 还不太懂, 现在突然觉得好简单, 感谢小程序让我复习. 具体演示一下, 还是以之前的 cj 组件为例.

组件 cj 的 .wxml 部分:

<!--components/cj/cj.wxml-->

<view>
<view>这是组件的内部结构,</view>
<slot></slot>
</view>

在 index 页面中使用组件, 并给组件 slot 传递内容:

<!--/pages/index/index.wxml-->
<view>
<text>下面显示的都是 cj 组件内容: </text>
<cj>
<view>我是外面传递给组件用以占位 slot 的.</view>
</cj>
</view>

则最终在 index 的渲染为:

下面显示的都是 cj 组件内容:
这是组件的内部结构,
我是外面传递给组件用以占位 slot 的.

多个 slot

但当组件比较复杂, 且需要使用多个 slot 的时候, 也是可以在组件的 js 中进行配置的, 即在组件定义时的 options 配置中设置 multipleSlots: true 即可.

Component({
options: {
multipleSlots: true
}
})

在使用的时候, 通过在 slot 标签中通过设置 name 属性值来区分, 即相当于 vue 中的具名插槽啦.

<view>
<slot name="before"></slot>
<text>俺是中间部分一段固定文本啦</text>
<slot name="after"></slot>
</view>

在使用的时候通过添加一个属性 slot="插槽名" 这样就对号入座了. 这里也整个例子演示一下啦.

组件 cj 的 wxml 部分:

<!--components/cj/cj.wxml-->

<view class="cj">
<slot name="before"></slot>
<view>俺是中间躺着不动的部分</view>
<slot name="after"></slot>
</view>

组件 js 中开启了多个 slot 设置:

Component({
options: {
multipleSlots: true
}
})

然后在 index 页面中使用 cj 组件, 分别给名为 before 和 after 这两个槽传递内容.

<!--/pages/index/index.wxml-->
<view>
<text>下面显示的都是 cj 组件内容: </text>
<cj>
<view slot="before">我是外面传递给 cj 组件中 before 槽的</view>
<view slot="after">我是外面传递给 cj 组件中 after 槽的</view>
</cj>
</view>

最终页面渲染如下:

下面显示的都是 cj 组件内容:
我是外面传递给 cj 组件中 before 槽的
俺是组件中间躺着不动的部分
我是外面传递给 cj 组件中 after 槽的

我一脸问号, 这不就是和 vue 一模一样嘛, vue 中这就叫做具名插槽, 直接用 v-slot="xxx". 但小程序这里和 vue 不同是, 它要在组件 js 中的 options 配置 multipleSlots=true. 但我感觉小程序还满简单的,相对于 vue 中的各种通信又传值的 slot 各种骚操作来说.

小程序自定义组件 - 插槽slot的更多相关文章

  1. 微信小程序自定义组件,提示组件

    微信小程序自定义组件,这里列举了一个常用的提示自定义组件,调用自定义组件中的方法和字段.仅供参考和学习. 编写组件: 在根目录下添加“components”目录,然后像添加Page页面一样添加自定义组 ...

  2. 小程序的组件插槽使用slot===以及小程序多个插槽使用方法 三步骤

    ===================== 小程序多个插槽使用方法 三步骤 小程序多个插槽第一步 小程序组件内使用多个插槽第二部 小程序使用多个插槽第三部

  3. 微信小程序自定义组件实现

    官方从 1.6.3 开始对于自定义组件这一块有了比较大的变动,首先比较明显的感觉就是文档比以前全多了,有木有!,现在小程序支持简洁的组件化编程,可以将页面内的功能模块抽象成自定义组件,以便在不同的页面 ...

  4. 微信小程序自定义组件

    要做自定义组件,我们先定一个小目标,比如说我们在小程序中实现一下 WEUI 中的弹窗组件,基本效果图如下. Step1 我们初始化一个小程序(本示例基础版本库为 1.7 ),删掉里面的示例代码,并新建 ...

  5. 微信小程序自定义组件的使用以及调用自定义组件中的方法

    在写小程序的时候,有时候页面的内容过多,逻辑比较复杂,如果全部都写在一个页面的话,会比较繁杂,代码可读性比较差,也不易于后期代码维护,这时候可以把里面某部分功能抽出来,单独封装为一个组件,也就是通常说 ...

  6. 如何在小程序自定义组件和动态传入数据小demo

    在开发过程中,我们会将页面常用功能抽象为一个组件,这样既方便又可以避免代码冗余.小程序中也提供了自定义组件,了解Vue的伙伴们会发现其实和Vue的组件化很相似.这里用返回顶部功能来说说如何自定义组件, ...

  7. 微信小程序自定义组件-下拉框

    这个是网址https://www.cnblogs.com/zjjDaily/p/9548433.html 微信小程序之自定义select下拉选项框组件 知识点:组件,animation,获取当前点击元 ...

  8. wx小程序自定义组件与页面之间参数传递

    在开发中,很多页面中会使用相同的组件,这时可以将具有相同信息的部分封装成一个组件,方便开发中调用.在调用中可能会涉及到数据的传递问题,例如页面与组件,组件与组件直接的数据传递. 首先看看页面与组件直接 ...

  9. 微信小程序自定义组件封装及父子间组件传值

    首先在我们可以直接写到需要的 page 中,然后再进行抽取组件,自定义组件建议 wxzx-xxx 命名 官网地址:https://developers.weixin.qq.com/miniprogra ...

  10. 微信小程序 自定义组件(stepper)

    项目目录: 步骤一:创建组件 声明这一组文件为自定义组件 stepper.json { "component": true, "usingComponents" ...

随机推荐

  1. [国家集训队] Tree2 题解

    加边删边 \(LCT\),标记下放同 \(luogu\) 线段树 \(2\) 一题. 时间复杂度 \(O(n\log n)\),第一次交的时候我维护 \(sum\) 不维护 \(sz\ WA\) 完了 ...

  2. STM32的SYSTICK 定时器(系统滴答定时器)

    什么是SysTick? 这是一个24位的系统节拍定时器system tick timer,SysTick,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一 ...

  3. MDK Debug时No target connected,STM32 ST-LINK Utility连接不上单片机的解决办法“Can not connect to target!”

    芯片下载程序成功,再次下载时出现,以下错误. 点击确认后,如下提示. 或提示如下. 不管怎么设置都侦测不到芯片. 使用STM32 ST-LINK Utility连接单片机时提示下边错误 "C ...

  4. Typecho 引入JS简单的实现点击文字即可复制

    在文章中插入大量无意义内容一不美观,二不便复制,不如使用 js 创建隐藏内容的复制按钮吧. 引入 JS 本主题:依次进入 控制台 - 外观 - 设置外观 - 主题自定义扩展,将以下代码加入到 自定义 ...

  5. 面试题10- II. 青蛙跳台阶问题

    地址:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/ <?php /** 一只青蛙一次可以跳上1级台阶,也可 ...

  6. 码云git笔记

    以后要日常使用这个东西,所以今天又学习了下,具体链接如下: 码云帮助中心https://gitee.com/help/articles/4122 先记录一点简单的入门东西: Git 全局设置: git ...

  7. postgresql 查询表结构

    sql查询 SELECT A.attnum, ( SELECT description FROM pg_catalog.pg_description WHERE objoid = A.attrelid ...

  8. Git 命令使用体验的神器 -- tig

    tig, 就是把 Git 这个单词倒过来念, 它是一个命令行工具, 日常使用中我用它来取代 Git 最高频的几个操作, 如 git log, git diff 以及 git blame等, 使用常见安 ...

  9. 在 Mac/Windows 系统中使用 Laradock 搭建基于 Docker 的 Laravel 开发环境

    Laradock 是 Docker 提供的完整 PHP 本地开发环境的一个镜像,任何环境下都可以安装 Docker来运行此开发环境,墙裂安利 简介 Laradock 是为 Docker 提供的完整 P ...

  10. gazebo小车模型(附带仿真环境)

    博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 1.(https://blog.csdn.net/qq_43406338/article/details/109 ...