微信小程序自定义组件

微信小程序自定义组件

wxs

一种类似于js的小程序脚本语言。 注意;

  1. wxs 文件不依赖于运行时的库。
  2. wxs 与js是另外一门语言。
  3. wxs于js的运行时完全隔离的,不能调用js中的函数,不能调用小程序提供的api
  4. 不能进行回调

总结一下

总结一下当前的内容 wxs类似于一门脚本语言,使用的是导出的方式来进行和wxml进行连接,类似于node.js wxml为页面显示的文件,类似于网页中的html文件 json为配置文件,可以进行对页面内容的配置。 wxss为css配置文件,可以进行css的配置。 js 为进行处理回调,以及页面数据绑定的文件

自定义组件

使用自定义组件,将页面的功能抽象成为组件,在不同的页面中重复使用,将复杂的页面抽象成为多个模块。即达到高内聚,低耦合的目标。

总诉

创建自定义组件

一个组件由json,wxml,wxss,js四个文件组成,要编写一个自定义组件,需要在json中自定义组件声明,声明这一组文件为自定义组件。

json文件如下

{
  "usingComponents": {
    "component": "/component/component"
  }
}
复制代码

即上方中设置该文件夹为组件文件夹

命名有点不规范,应该命名为components

Component({
  properties: {
    // 这里定义了innerText属性,属性值可以在组件使用时指定
    innerText: {
      type: String,
      value: '默认文字',
    }
  },
  data: {
    // 这里是一些组件内部数据
    someData: {}
  },
  methods: {
    // 这里是一个自定义方法
    customMethod: function () { }
  }
})
复制代码

使用component函数进行设置

ps 这里需要重要component为大写。必须写为Component 否则会无法显示,一个小坑,不是驼峰命名法,╮(╯▽╰)╭

设置组件的内容

<view class="inner">
  {
   {innerText}}
</view>
<slot></slot>
复制代码

设置组件的css

.inner {
  color: red
}
复制代码

通过设置页面的json数据,进行对组件的引用

{
  "usingComponents": {
    "component": "/component/component"
  }
}
复制代码

设置component组件引用component文件夹下单component组件内容 对组件进行引用

<view>
  <component inner-text="Some text"></component>
</view>
复制代码

设置文字内容为some text, 如果

<view>
  <component></component>
</view>
复制代码

设置的话,将会设置为默认的。

组件模板和样式

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

组件模板

组件模板的写法和页面模板相同,组件模板和组件数据组合生成节点树。将被插入到组件的引用位置上。 组件模板中提供slot,用于承载组件引用时的子节点,即组件引用的时候,其内部的子节点,将会插入到slot节点内部 组件的wxml文件如下

<view class="inner">
<slot></slot>
  {
   {innerText}}
  这是内部节点
</view>
复制代码

page的wxml文件如下

<view>
  <component>
    <view>这是内部节点</view>
  </component>
</view>
复制代码

编译后即可生成

模板和数据绑定

使用数据绑定,向子组件的属性动态的传递数据 即,向模板传递数据 设置模板的wxml

<view>
  <component propA="hello" propB="world">
    <view>这是内部节点</view>
  </component>
</view>
复制代码

设置模板的js文件

Component({
  properties: {
    // 这里定义了innerText属性,属性值可以在组件使用时指定
    propA: {
      type: String,
      value: '1'
    },
    propB: {
      type: String,
      value: '2'
    }
  },
  data: {
    // 这里是一些组件内部数据
    someData: {}
  },
  methods: {
    // 这里是一个自定义方法
    customMethod: function () { }
  }
})
复制代码

设置page的wxml文件

<view>
  <component propA="hello" propB="world">
    <view>这是内部节点</view>
  </component>
</view>
复制代码

完成对组件的使用。

设置组件的slot

slot为子节点的承载点。 在Component函数中设置options对象的multipleSlots属性为true,确保支持多slot的支持 即

  options: {
    multipleSlots: true  // 在组件中支持多slot子节点的支持
  }
复制代码

对于多个slot使用name来进行区分 定义wxml文件如下

<!-- 这是自定义组件的内部WXML结构 -->
<view class="inner">
<slot name="before"></slot>
  {
   {propA}}
  {
   {propB}}
  这是内部节点
<slot name="after"></slot>
</view>
复制代码

接着定义page的wxml文件

<view>
  <component propA="hello" propB="world">
    <view slot="after">这是after</view>
    <view slot="before">这是before</view>
  </component>
</view>
复制代码

完成,至此完成多个节点的slot的插入

组件样式

组件对应于wxss文件的样式,只对组件内部的wxml节点生效。 注意

  1. 组件只能使用class
  2. 组件避免使用后代选择器

:host选择器

使用host选择器,可以设置组件的默认样式

:host {
  color: yellow;
}
复制代码

即上方设置该页面的全部的host值为yellow

外部样式

普通样式和外部样式尽量避免同时使用,因为这样会造成两个类的优先级为未定义的 设置externalClasses 为class的样式。 commpont文件如下 js

Component({
  properties: {
    // 这里定义了innerText属性,属性值可以在组件使用时指定
    propA: {
      type: String,
      value: '1'
    },
    propB: {
      type: String,
      value: '2'
    }
  },
  options: {
    multipleSlots: true  // 在组件中支持多slot子节点的支持
  },
  externalClasses: ['my-class'] // 设置允许外部样式的my-class的使用
})
复制代码

wxml

<!-- 这是自定义组件的内部WXML结构 -->
<view>
<slot name="before"></slot>
  {
   {propA}}
  {
   {propB}}
  这是内部节点
<slot name="after"></slot>
</view>
复制代码

wxss

:host {
  color: red
}
复制代码

page如下 wxml如下

<view>
  <component propA="hello" propB="world" class="my-class">
    <view slot="after">这是after</view>
    <view slot="before">这是before</view>
  </component>
</view>
复制代码

wxss如下

.my-class {
  color:yellow
}
复制代码

显示为黄色,因为默认的权重低于外部样式表

全局样式

设置addGlobalClass为true即可,当设置addGlobalClass的时候,其组件定义的css无效,只有外部的class影响,除此之外都不影响

转载于:https://juejin.im/post/5b8c9830e51d4538940047ff

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101455.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一个多边形内部有3枚钉子_多边形的内部和外部

    一个多边形内部有3枚钉子_多边形的内部和外部Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 24 Accepted Submission(s) : 7Problem DescriptionStatement of the Problem Several drawing applications allow us to draw polygons and almost all of the

    2022年8月10日
    3
  • winhex 数据恢复_win10文件恢复软件

    winhex 数据恢复_win10文件恢复软件数据恢复分类:硬恢复和软恢复。所谓硬恢复就是硬盘出现物理性损伤,比如有盘体坏道、电路板芯片烧毁、盘体异响,等故障,由此所导致的普通用户不容易取出里面数据,那么我们将它修好,同时又保留里面的数据或后来恢

    2022年8月5日
    5
  • 2022计算机Java二级考试四十五套题真题【收藏版】(一周裸考计划)[通俗易懂]

    当你看到这篇文章的时候,相信自己已经在考试的路上,或者即将踏入计算机二级考试的道路。先收藏为敬。再网上看了很多的java面试题,有很多都是零零碎碎的,有或者是需要付费加密????的,加个vip什么的,故而以下是博主整理的有关java面试题的以下内容,我想以一种幽默风趣????的风格来给大家分享和探讨。另外附加有一些公司的面试真题(内部分享)下面我就开启????耳机模式。并且⭐是重要部分,要记易考噢。

    2022年4月13日
    52
  • navicat导出longtext类型数据乱码的解决方案

    navicat导出longtext类型数据乱码的解决方案一、先使用sql查询出需要导出的内容,将longtext类型使用cast转化成char类型SELECT company_id, wechat_mp_appid, CAST(survey_risk_tips_orgASchar)ASsurvey_risk_tips_org, CAST(survey_disclaimerASchar)ASsurvey_disclaimer, CAS…

    2022年5月14日
    47
  • 分辨率,像素,像素密度易懂

    分辨率,像素,像素密度易懂分辨率是什么?一般会说这个屏幕的分辨率是1920*1080,这就说明纵向和横向上有1920个和1080个像素点;像素点是什么?一个像素点就是一个色彩块,没有实际的物理尺寸;什么是屏幕像素密度?一英寸长的一条线上理论上会有多少个像素点;例如:一个手机长边有1920个像素点,短边有1080个像素点,屏幕大小(对角线的物理大小)是5.2英寸的,那么屏幕密度是怎么计…

    2022年5月4日
    60
  • JavaWeb总结–Servlet 工作原理解析

    JavaWeb总结–Servlet 工作原理解析

    2021年9月16日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号