开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用;也可以将复杂的页面拆分成多个低耦合的模块,有助于代码维护。

自定义组件:可复用的 WXML、WXSS、JS、JSON。
behavior:可复用的组件 JS(属性、数据、生命周期函数和方法等)。
wxs:可复用的普通 JS。
template 模板:可复用的 WXML。

创建自定义组件:

自定义组件类似于页面,也是由 json、wxml、wxss、js 4个文件组成。

  1. 在 json 文件中进行自定义组件声明:将 component 字段设为 true 可将这一组文件设为自定义组件。

    /* custom-component.j'son */
    {"component": true
    }
    
  2. 在 wxml 文件中编写组件模板;在 wxss 文件中加入组件样式;在 js 文件中使用 Component() 来注册组件。
    <!-- custom-component.wxml -->
    <view class="container">{{text}}
    </view>/* custom-component.wxss */
    .container {color: #FF4A2F;
    }// custom-component.js
    Component({data: {text: 'Hello World',},
    })
    

使用自定义组件:

  1. 在使用自定义组件的页面的 json 文件中进行引用声明:需要提供自定义组件的标签名和对应的文件路径。

    自定义组件也可以引用自定义组件,引用方法类似于页面引用自定义组件的方式(使用 usingComponents 字段)。

    /* index.j'son */
    {"usingComponents": {// 因为 WXML 节点标签名只能是小写字母、中划线和下划线的组合,所以自定义组件的标签名也只能包含这些字符"custom-component": "components/custom-component/custom-component"}
    }
    
  2. 在使用自定义组件的页面的 wxml 中就可以像使用基础组件一样使用自定义组件:节点名即自定义组件的标签名,节点属性即传递给自定义组件的属性。
    <!-- index.wxml -->
    <custom-component></custom-component>
    

抽象节点:

有时,自定义组件中的一些节点,其对应的自定义组件不是由自定义组件本身确定的,而是自定义组件的调用者确定的。这时可以把这个节点声明为“抽象节点”。

  1. 在自定义组件中使用抽象节点:

    // 实现一个选框组 selectable-group组件,它其中可以放置单选框 custom-radio 或者复选框 custom-checkbox
    <!-- selectable-group.wxml -->
    <view wx:for="{{labels}}"><label><selectable disabled="{{false}}"></selectable>{{item}}</label>
    </view>
    

    selectable 不是任何在 json 文件的 usingComponents 字段中声明的组件,而是一个抽象节点,它需要在 componentGenerics 字段中声明。

    {"componentGenerics": {"selectable": true}
    }
    
  2. 在页面中使用包含抽象节点的自定义组件:

    节点的 generic 引用 generic:xxx=“yyy” 中,值 yyy 只能是静态值,不能包含数据绑定。因而抽象节点特性并不适用于动态决定节点名的场景。

    // 在使用 selectable-group 组件时,必须指定“selectable”具体是哪个组件
    <selectable-group generic:selectable="custom-radio" />
    
    {"usingComponents": {"custom-radio": "path/to/custom/radio",}
    }
    

抽象节点的默认组件:

抽象节点可以指定一个默认组件,当具体组件未被指定时,将创建默认组件的实例。默认组件可以在 componentGenerics 字段中指定。

{"componentGenerics": {"selectable": {"default": "path/to/default/component"}}
}

第三方自定义组件:

开发第三方自定义组件:

使用官方提供的命令行工具初始化项目。

  1. 执行 npm install -g @wechat-miniprogram/miniprogram-cli 命令安装命令行工具。
  2. 新建一个空目录作为项目根目录,在此根目录下执行 miniprogram init --type custom-component
  3. 命令执行完毕后会发现项目根目录下生成了许多文件,这是根据官方的项目模板生成的完整项目,之后开发者可直接在此之上进行开发修改。

《九》微信小程序中的自定义组件相关推荐

  1. 手把手教你实现小程序中的自定义组件

    之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,当时官方对这方面的文档也只是寥寥几句,一笔带过而已,所以写起来真的是非常非常痛苦!! 好在微信小程序的库从 1.6.3 开始,官方对于 ...

  2. 微信小程序中使用vant组件库(超详细)

    目录 前言 Vant Weapp的安装与使用 1.安装 node.js 2.通过 npm 安装 3.修改 app.json 4.修改 project.config.json 5.构建 npm 包 6. ...

  3. html img 手势缩放,微信小程序中利用image组件实现图片手势缩放

    微信小程序中利用image组件实现图片手势缩放,前端大神严灏的牛文,讲解了微信小程序中image组件的三种是缩放模式,三种之中,只有 aspectFit 模式可以等比例缩放图片,并显示完整的图片. 原 ...

  4. 微信小程序怎么修改自定义组件中的样式

    在微信小程序中我们经常要用到自定义组件,但是有时我们因为引用的地方不同可能组件的一些样式也要修改,比如颜色,高度,宽度等来适合不同的页面,有没有办法来修改自定义组件中的样式呢,很显然是有的,我们要用到 ...

  5. 五分钟学会在微信小程序中使用 vantUI 组件库

    前言 我们在开发微信小程序时,设计和实现好用的用户界面无疑是至关重要的一步.但是微信小程序官方自带的 UI 组件库无法满足很多使用场景,这个时候就需要我们使用一些第三方的 UI 组件库.而 vant ...

  6. 微信小程序 - 进阶(自定义组件、promis化、mobx、分包、自定义tabBar)

    文章目录 一.自定义组件 1.创建组件 2.引用组件 3.组件和页面区别 4.组件样式 5.data.methods.properties 6.小程序的 data 和 properties 区别 7. ...

  7. 入门微信小程序三(自定义组件)

    1.组件的创建 ① 在项目的根目录中,鼠标右键,创建 components -> test 文件夹 ② 在新建的 components -> test 文件夹上,鼠标右键,点击" ...

  8. 微信小程序开发:自定义组件-behaviors

    1.什么是behaviors behaviors是小程序中,用于实现组件间代码共享的特性,类似于vue的"mixins". 2.behaviors的工作方式 每个behavior可 ...

  9. 微信小程序中使用video组件

    文章目录 前情提要 搭建视频服务器 小程序项目 app.json pages/index/index.wxml pages/index/index.wxss pages/index/index.js ...

最新文章

  1. 丽水学院计算机科学与技术,丽水学院计算机科学与技术专业2016年在河南理科高考录取最低分数线...
  2. 7.2.3 使用RenderTargetBitmap类生成图片
  3. SpringBoot笔记:SpringBoot集成MinIO分布式文件系统
  4. 深度解析 | 基于DAG的分布式任务调度平台:Maat
  5. 【编程思想】【设计模式】【行为模式Behavioral】观察者模式Observer
  6. ios刷android8.0,颤抖吧 iOS, Android 8.0正式发布!
  7. 数据结构(六)二叉树的遍历(递归非递归方法)
  8. 苹果cms V10模板 秘趣响应式高端在线影视视频模板
  9. Torch 学习总结
  10. 社区活动 | Apache Flink Meetup·深圳站,锁定 Flink 最佳实践
  11. (4) numpy.isnan() 用法
  12. 朋友圈加粗字体数字_字体:新游黑体(游ゴシック)重大更新,精巧的日系字体~...
  13. Java员工管理系统
  14. oracle imp 版本错误,解决imp导入数据报IMP-00098错误
  15. 新浪邮箱服务器密码被盗,邮箱密码盗取严重的注意事项以及处理建议
  16. 微信微粒贷开通什么条件?微粒贷开通方法及流程
  17. Byte和Integer互转
  18. JS两个日期之间计算时间差(返回:天数,小时,分钟,秒数)
  19. TypeError [ERR_INVALID_ARG_TYPE]: The “path“ argument must be of type string. Received undefined
  20. Python数据挖掘与机器学习实战——回归分析——线性回归及实例

热门文章

  1. Python PEP8 — the Style Guide for Python Code
  2. 超详细一文到底!软件测试基本流程
  3. 安卓 linux服务器文件夹,Android系统下根目录下文件
  4. 全球及中国便携式医用制氧机行业研究及十四五规划分析报告
  5. IO-BIO NIO
  6. CSI-RS-TRS介绍
  7. JavaScript高级程序设计-JavaScript API
  8. Maven(保姆级全详)新手入门
  9. 个人养老金是什么?怎么缴?如何领?
  10. odoo15 csv 格式文件加载 中华民簇表