首页 > 其他分享 >自定义组件

自定义组件

时间:2023-08-01 20:35:34浏览次数:41  
标签:style 自定义 样式 组件 节点 模板

微信小程序 组件模板和样式

组件模板和样式

类似于页面,自定义组件拥有自己的 wxml 模板和 wxss 样式。

 

组件模板

 

组件模板的写法与页面模板相同。组件模板与组件数据结合后生成的节点树,将被插入到组件的引用位置上。

在组件模板中可以提供一个 <slot> 节点,用于承载组件引用时提供的子节点。

<!-- 组件模板 -->
<view class="wrapper">
  <view>这里是组件的内部节点</view>
  <slot></slot>
</view>

 

<!-- 引用组件的页面模板 -->
<view>
  <component-tag-name>
    <!-- 这部分内容将被放置在组件 <slot> 的位置上 -->
    <view>这里是插入到组件slot中的内容</view>
  </component-tag-name>
</view>

 

在模板中引用到的自定义组件及其对应的节点名需要在 json 文件中显式定义,否则会被当作一个无意义的节点。除此以外,节点名也可以被声明为抽象节点。

模板数据绑定

与普通的 WXML 模板类似,可以使用数据绑定,这样就可以向子组件的属性传递动态数据。

 

 

<view>
  <component-tag-name prop-a="{{dataFieldA}}" prop-b="{{dataFieldB}}">
    <!-- 这部分内容将被放置在组件 <slot> 的位置上 -->
    <view>这里是插入到组件slot中的内容</view>
  </component-tag-name>
</view>

在以上例子中,组件的属性 propA 和 propB 将收到页面传递的数据。页面可以通过 setData 来改变绑定的数据字段。

注意:这样的数据绑定只能传递 JSON 兼容数据。自基础库版本 2.0.9 开始,还可以在数据中包含函数(但这些函数不能在 WXML 中直接调用,只能传递给子组件)。

 

组件样式

组件对应 wxss 文件的样式,只对组件wxml内的节点生效。编写组件样式时,需要注意以下几点:

  • 组件和引用组件的页面不能使用id选择器(#a)、属性选择器([a])和标签名选择器,请改用class选择器。
  • 组件和引用组件的页面中使用后代选择器(.a .b)在一些极端情况下会有非预期的表现,如遇,请避免使用。
  • 子元素选择器(.a>.b)只能用于 view 组件与其子节点之间,用于其他组件可能导致非预期的情况。
  • 继承样式,如 font 、 color ,会从组件外继承到组件内。
  • 除继承样式外, app.wxss 中的样式、组件所在页面的的样式对自定义组件无效(除非更改组件样式隔离选项)。

虚拟化组件节点

默认情况下,自定义组件本身的那个节点是一个“普通”的节点,使用时可以在这个节点上设置 class style 、动画、 flex 布局等,就如同普通的 view 组件节点一样。

<!-- 页面的 WXML -->
<view style="display: flex">
  <!-- 默认情况下,这是一个普通的节点 -->
  <custom-component style="color: blue; flex: 1">蓝色、满宽的</custom-component>
</view>

但有些时候,自定义组件并不希望这个节点本身可以设置样式、响应 flex 布局等,而是希望自定义组件内部的第一层节点能够响应 flex 布局或者样式由自定义组件本身完全决定。

这种情况下,可以将这个自定义组件设置为“虚拟的”:

 

 

Component({
  options: {
    virtualHost: true
  },
  properties: {
    style: { // 定义 style 属性可以拿到 style 属性上设置的值
      type: String,
    }
  },
  externalClass: ['class'], // 可以将 class 设为 externalClass
})

 

 

需要注意的是,自定义组件节点上的 class style 和动画将不再生效,但仍可以:

将 style 定义成 properties 属性来获取 style 上设置的值;
将 class 定义成 externalClasses 外部样式类使得自定义组件 wxml 可以使用 class 值。

 

 

 

 

 

 

 

 

 

标签:style,自定义,样式,组件,节点,模板
From: https://www.cnblogs.com/xiamaocheng/p/17598993.html

相关文章

  • java 自定义读取properties配置文件属性
    把属性存到一个map里,并提供get方法,如果没有获取到值,则重新加载一遍配置文件,重新赋值,从而刷新数packagecom.aaa.demo.testProperties;importjava.io.IOException;importjava.io.InputStream;importjava.util.Enumeration;importjava.util.HashMap;importjava.util.Map;......
  • 如何开发一个小程序自定义组件
    什么是小程序自定义组件?小程序自定义组件是小程序开发中常用的一种技术,它可以将小程序中常用的UI组件封装成一个独立的组件,并在不同的页面中复用,从而提高小程序的代码可维护性和复用性。自定义组件可以包含自定义的样式、属性、事件等,它们是一种独立的封装单元,可以在不同的页面......
  • java日志脱敏(密码/身份证/其他自定义等)logback
    java日志脱敏(密码/身份证/其他自定义等)logback原文链接:https://blog.csdn.net/weixin_39286166/article/details/126889660一.脱敏规则类 importch.qos.logback.classic.pattern.MessageConverter;importch.qos.logback.classic.spi.ILoggingEvent;importorg.apache.c......
  • vue3之父组件中封了子组件的抽屉(弹框类),通过update:modelValue来进行父子组件的v-mod
    eg:父组件a.vue<AddAiDrawer:projectId="route.query.id"v-model="addAiShow"title="新增"type="spaceAi"@call-back-table="refreshTa......
  • Vant组件库,表单校验时使用Toast组件弹出消息
     在使用Vat组件的表单时,校验规则会出现在表单的下面,造成样式紊乱而且不美观。通过Taost组件实现校验信息的轻提示,简约美观方便的使用函数校验和正则校验来实现多功能校验。          Toast组件原来样式:                  ......
  • spring boot学习(7)— 自定义中的 HttpMessageConverter
    在我们开发自己的应用时,有时候,我们可能需要自定义一些自己的数据格式来传输,这时,自定义的数据传输和类的实例之间进行转化就需要统一起来了, SpringMVC 中的 HttpMessageConverter 就派上用场了。HttpMessageConverter 的声明:publicinterfaceHttpMessageConverter<T>{......
  • 在线直播系统源码,vant 轮播图组件
    在线直播系统源码,vant轮播图组件 <template> <van-swipe:autoplay="3000"indicator-color="#1baeae">  <van-swipe-itemv-for="(item,index)inlist":key="index">   <img:src="item.carouselUrl"......
  • Tomcat9 无法启动组件[Connector[AJP/1.3-8009]]
    无法启动组件[Connector[AJP/1.3-8009]]在tomcat中开启ajp后,启动tomcat遇到错误无法启动组件[Connector[AJP/1.3-8009]]。错误原因缺少配置项secretRequired。tomcat9提供的默认的AJP配置如下:<Connectorprotocol="AJP/1.3"address="::1"port="800......
  • 前端Vue自定义精美商品分类组件category 可用于电商应用分类页面
    随着技术的不断发展,传统的开发方式使得系统的复杂度越来越高。在传统开发过程中,一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改,造成牵一发而动全身的情况。为了解决这个问题,我们采用了组件化的开发模式。通过组件化开发,可以有效地实现单独开发,单独维护,而且它们之间......
  • react使用自定义animation实现水平效果的路由切换
    例如:A组件跳B组件 A组件:importReactfrom'react';import'./A.scss'import{useNavigate}from'react-router-dom';exportdefaultfunctionA(){letnavigate=useNavigate()return(<divonClick={()=>{l......