收藏
回答

需求:更强大的slot

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 需求 客户端 7.0.3 2.6.2

- 需求的场景描述(希望解决的问题)

slot算是小程序框架中最能提高开发效率的功能之一了,但相较现有成熟框架,仍有不足,例如:

1.当没有为插槽提供内容时,无法设置默认内容

2.无法将组件内的数据传递给插槽,无法配合for使用


- 希望提供的能力

slot允许设置默认内容


<slot name="before">

    <text>默认内容<text>

</slot>


slot允许传递数据

<view wx:for="{{list}}">

    <slot data="{{item}}"></slot>

</view>


回答关注问题邀请回答
收藏

4 个回答

  • 小程序技术专员-june
    小程序技术专员-june
    2019-04-04

    1、slot 支持默认内容这个已经在排期中

    2、slot 本身应该是属于父组件的一部分,它能使用的数据是父组件数据而不是子组件数据。如果要定制子组件的“某些部分”的话,应该不是使用 slot,而是使用抽象节点吧:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/generics.html

    2019-04-04
    有用
    回复 7
    • Maverick
      Maverick
      2019-04-08

      可是抽象节点要定制组件的“某些部分”的话,必须将这一部分做成组件,而且还要在组件的usingComponents字段声明,感觉并不是真正意义上的“自定义组件模板中的一些节点”,如果需要定制的部分不包含自己的逻辑,仅仅是定义wxml结构而已。如果将每一种可能出现的结构都做成组件,不仅多此一举,写出来的组件耦合度也过高。


      例如我有个tab选项卡组件,接受一个数组,数组中每个对象都有选项卡标签,子标签,图标,颜色等等信息,组件内使用for循环slot生成所有选项卡项,使用组件时通过slot就能定义子项的模板,如果slot能使用组件内for循环当前项的数据的话,就可以轻松的决定展示哪些信息,以什么形式展示,就像vue的作用域插槽,或许这才是真正意义上的"自定义组件模板中的一些节点"吧,使用场景还是挺多的,希望官方考虑一下。


      2019-04-08
      3
      回复
    • 小程序技术专员-june
      小程序技术专员-june
      2019-04-08回复Maverick

      我们目前的设计是尽量遵从 webcomponents 规范来的:https://github.com/w3c/webcomponents/blob/gh-pages/proposals/Slots-Proposal.md

      你这个需求本身也是耦合了子组件的数据来进行渲染,而不是用当前组件的数据来渲染,也就是说依赖外部数据结构。就目前来说,我们应该暂时不会去考虑这个需求的。

      2019-04-08
      回复
    • Ewet
      Ewet
      2019-04-09回复小程序技术专员-june

      就是slot支持for循环是支持不了的是吗

      2019-04-09
      1
      回复
    • Yayure
      Yayure
      2019-10-11
      我需要渲染的是不可控的html结构,抽象节点无法满足这点需求吧,而slot却可以。比如说我重新封装一个swiper,那swiper-item是要在组件内渲染还是传入slot渲染呢,组件内渲染swiper-item内的html结构不可控的,这种情况下只能采用slot,而slot又无法向上携带数据渲染,那结果不就是很头疼了吗。虽然可以把全部swiper-item用一个slot渲染,但这样的设计已经缺乏合理性了啊,我swiper标签在组件内而swiper-item在组件外,根本就没合理性可言。其实楼主以及大家的需求无非就是能像vue一样在slot向上携带数据,这样很多需求都能解决,然而现在实际在使用组件的时候考虑到各种因素就很蛋疼
      2019-10-11
      回复
    • Yayure
      Yayure
      2019-10-11
      好吧,我已经放弃封装了,事实证明如果数据无法向上携带那动态html结构基本等同报废,无论是结构还是数据或是样式,少了这向上传递数据这一环所有的动态嵌入与组件内部逻辑绑定基本是不可能的,不要说有组件内部事件向上发送,因为这样已经本末倒置了,都不得不向上发送事件了那我干嘛还封装,成本高收益低
      2019-10-11
      1
      回复
    查看更多(2)
  • 。
    2019-12-11

    封装了一半,看到这个凉了半截

    2019-12-11
    有用 2
    回复
  • 东门吹牛
    东门吹牛
    2019-08-31

    话说现在有作用域插槽的概念了吗?

    2019-08-31
    有用 2
    回复
  • 范范
    范范
    2019-11-14

    话说,第二个问题,现在有解决方案了么/?

    2019-11-14
    有用 1
    回复
登录 后发表内容