• 小程序中如何使用自定义组件应用及搭建个人中心布局


    一,自定义组件

    小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。

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

    创建自定义组件

    1.1 建立文件

    1.2 修改文件及添加文件

    类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成。要编写一个自定义组件,首先需要在 json 文件中进行自定义组件声明(将 component 字段设为 true 可将这一组文件设为自定义组件):

    首先需要在 json 文件中进行自定义组件声明(将 component 字段设为 true 可将这一组文件设为自定义组件)

    tabs.json:

    在project.config.json添加行代码 :

    二,个人中心布局

    2.1 创建自定义组件

    tabs.wxml:

    1. <view class="tabs">
    2. <view class="tabs_title">
    3. <view wx:for="{{tabList}}" wx:key="id" class="title_item {{index==tabIndex?'item_active':''}}" bindtap="handleItemTap" data-index="{{index}}">
    4. <view style="margin-bottom:5rpx">{{item}}view>
    5. <view style="width:30px" class="{{index==tabIndex?'item_active1':''}}">view>
    6. view>
    7. view>
    8. <view class="tabs_content">
    9. <slot>slot>
    10. view>
    11. view>

    tabs.wxss:

    1. .tabs {
    2. position: fixed;
    3. top: 0;
    4. width: 100%;
    5. background-color: #fff;
    6. z-index: 99;
    7. border-bottom: 1px solid #efefef;
    8. padding-bottom: 20rpx;
    9. }
    10. .tabs_title {
    11. /* width: 400rpx; */
    12. width: 90%;
    13. display: flex;
    14. font-size: 9pt;
    15. padding: 0 20rpx;
    16. }
    17. .title_item {
    18. color: #999;
    19. padding: 15rpx 0;
    20. display: flex;
    21. flex: 1;
    22. flex-flow: column nowrap;
    23. justify-content: center;
    24. align-items: center;
    25. }
    26. .item_active {
    27. /* color:#ED8137; */
    28. color: #000000;
    29. font-size: 11pt;
    30. font-weight: 800;
    31. }
    32. .item_active1 {
    33. /* color:#ED8137; */
    34. color: #000000;
    35. font-size: 11pt;
    36. font-weight: 800;
    37. border-bottom: 6rpx solid #333;
    38. border-radius: 2px;
    39. }

     tabs.js:

    1. var App = getApp();
    2. Component({
    3. /**
    4. * 组件的属性列表
    5. */
    6. properties: {
    7. tabList:Object
    8. },
    9. /**
    10. * 组件的初始数据
    11. */
    12. data: {
    13. tabIndex:0
    14. },
    15. /**
    16. * 组件的方法列表
    17. */
    18. methods: {
    19. handleItemTap(e){
    20. // 获取索引
    21. const {index} = e.currentTarget.dataset;
    22. // 触发 父组件的事件
    23. this.triggerEvent("tabsItemChange",{index})
    24. this.setData({
    25. tabIndex:index
    26. })
    27. }
    28. }
    29. })

     2.2 使用自定义组件

    需要在哪个页面中进行使用,就需要在哪个页面中进行引用配置.

    比如说 : 需要在会议页面中进行使用,就要在会议页面.json (meeting/list/list.json)下配置即可。

    本案例是配置在会议模块中,那就是在.json (meeting/list/list.json)中配置。

    meeting目录下的list.json:

    1. {
    2. "usingComponents": {
    3. "tabs": "/components/tabs/tabs"
    4. }
    5. }

    meeting目录下的list.js的data中定义属性:

     tabs:['会议中','已完成','已取消','全部会议']

    meeting目录下的list.wxml:

    效果:

    2.3 会议模块布局

        点击相应的内容显示相应的数据,我们只需将所点击内容的index值传递,根据index值的不同进行不同数据的遍历即可

    2.3.1 数据

    在list.js定义:

    1. // pages/meeting/list/list.js
    2. Page({
    3. /**
    4. * 页面的初始数据
    5. */
    6. data: {
    7. tabs:['会议中','已完成','已取消','全部会议'],
    8. lists: [
    9. {
    10. 'id': '1',
    11. 'image': '/static/persons/1.jpg',
    12. 'title': '对话产品总监 | 深圳·北京PM大会 【深度对话小米/京东/等产品总监】',
    13. 'num':'304',
    14. 'state':'进行中',
    15. 'time': '10月09日 17:59',
    16. 'address': '深圳市·南山区'
    17. },
    18. {
    19. 'id': '2',
    20. 'image': '/static/persons/2.jpg',
    21. 'title': 'AI WORLD 2016世界人工智能大会',
    22. 'num':'380',
    23. 'state':'进行中',
    24. 'time': '10月09日 17:39',
    25. 'address': '北京市·朝阳区'
    26. },
    27. {
    28. 'id': '3',
    29. 'image': '/static/persons/3.jpg',
    30. 'title': 'H100太空商业大会',
    31. 'num':'500',
    32. 'state':'进行中',
    33. 'time': '10月09日 17:31',
    34. 'address': '大连市'
    35. },
    36. {
    37. 'id': '1',
    38. 'image': '/static/persons/4.jpg',
    39. 'title': '报名年度盛事,大咖云集!2016凤凰国际论坛邀您“与世界对话”',
    40. 'num':'150',
    41. 'state':'进行中',
    42. 'time': '10月09日 17:21',
    43. 'address': '北京市·朝阳区'
    44. },
    45. {
    46. 'id': '1',
    47. 'image': '/static/persons/5.jpg',
    48. 'title': '新质生活 · 品质时代 2016消费升级创新大会',
    49. 'num':'217',
    50. 'state':'进行中',
    51. 'time': '10月09日 16:59',
    52. 'address': '北京市·朝阳区'
    53. }
    54. ],
    55. lists1: [
    56. {
    57. 'id': '1',
    58. 'image': '/static/persons/7.jpg',
    59. 'title': '对话产品总监 | 深圳·北京PM大会 【深度对话小米/京东/等产品总监】',
    60. 'num':'304',
    61. 'state':'已结束',
    62. 'time': '10月09日 17:59',
    63. 'address': '深圳市·南山区'
    64. },
    65. {
    66. 'id': '1',
    67. 'image': '/static/persons/6.jpg',
    68. 'title': 'AI WORLD 2016世界人工智能大会',
    69. 'num':'380',
    70. 'state':'已结束',
    71. 'time': '10月09日 17:39',
    72. 'address': '北京市·朝阳区'
    73. },
    74. {
    75. 'id': '1',
    76. 'image': '/static/persons/1.jpg',
    77. 'title': 'H100太空商业大会',
    78. 'num':'500',
    79. 'state':'已结束',
    80. 'time': '10月09日 17:31',
    81. 'address': '大连市'
    82. }
    83. ],
    84. lists2: [
    85. {
    86. 'id': '1',
    87. 'image': '/static/persons/4.jpg',
    88. 'title': '对话产品总监 | 深圳·北京PM大会 【深度对话小米/京东/等产品总监】',
    89. 'num':'304',
    90. 'state':'进行中',
    91. 'time': '10月09日 17:59',
    92. 'address': '深圳市·南山区'
    93. },
    94. {
    95. 'id': '1',
    96. 'image': '/static/persons/3.jpg',
    97. 'title': 'AI WORLD 2016世界人工智能大会',
    98. 'num':'380',
    99. 'state':'已结束',
    100. 'time': '10月09日 17:39',
    101. 'address': '北京市·朝阳区'
    102. }
    103. ],
    104. lists3: [
    105. {
    106. 'id': '1',
    107. 'image': '/static/persons/7.jpg',
    108. 'title': '对话产品总监 | 深圳·北京PM大会 【深度对话小米/京东/等产品总监】',
    109. 'num':'304',
    110. 'state':'进行中',
    111. 'time': '10月09日 17:59',
    112. 'address': '深圳市·南山区'
    113. },
    114. {
    115. 'id': '1',
    116. 'image': '/static/persons/2.jpg',
    117. 'title': 'AI WORLD 2016世界人工智能大会',
    118. 'num':'380',
    119. 'state':'已结束',
    120. 'time': '10月09日 17:39',
    121. 'address': '北京市·朝阳区'
    122. },
    123. {
    124. 'id': '1',
    125. 'image': '/static/persons/4.jpg',
    126. 'title': 'H100太空商业大会',
    127. 'num':'500',
    128. 'state':'进行中',
    129. 'time': '10月09日 17:31',
    130. 'address': '大连市'
    131. },
    132. {
    133. 'id': '1',
    134. 'image': '/static/persons/5.jpg',
    135. 'title': '报名年度盛事,大咖云集!2016凤凰国际论坛邀您“与世界对话”',
    136. 'num':'150',
    137. 'state':'已结束',
    138. 'time': '10月09日 17:21',
    139. 'address': '北京市·朝阳区'
    140. },
    141. {
    142. 'id': '1',
    143. 'image': '/static/persons/1.jpg',
    144. 'title': '新质生活 · 品质时代 2016消费升级创新大会',
    145. 'num':'217',
    146. 'state':'进行中',
    147. 'time': '10月09日 16:59',
    148. 'address': '北京市·朝阳区'
    149. }
    150. ]
    151. },
    152. tabsItemChange(e){
    153. let tolists;
    154. if(e.detail.index==1){
    155. tolists = this.data.lists1;
    156. }else if(e.detail.index==2){
    157. tolists = this.data.lists2;
    158. }else{
    159. tolists = this.data.lists3;
    160. }
    161. this.setData({
    162. lists: tolists
    163. })
    164. },
    165. /**
    166. * 生命周期函数--监听页面加载
    167. */
    168. onLoad(options) {
    169. },
    170. /**
    171. * 生命周期函数--监听页面初次渲染完成
    172. */
    173. onReady() {
    174. },
    175. /**
    176. * 生命周期函数--监听页面显示
    177. */
    178. onShow() {
    179. },
    180. /**
    181. * 生命周期函数--监听页面隐藏
    182. */
    183. onHide() {
    184. },
    185. /**
    186. * 生命周期函数--监听页面卸载
    187. */
    188. onUnload() {
    189. },
    190. /**
    191. * 页面相关事件处理函数--监听用户下拉动作
    192. */
    193. onPullDownRefresh() {
    194. },
    195. /**
    196. * 页面上拉触底事件的处理函数
    197. */
    198. onReachBottom() {
    199. },
    200. /**
    201. * 用户点击右上角分享
    202. */
    203. onShareAppMessage() {
    204. }
    205. })
    2.1.2 显示

    在list.wxml定义:

    1. <tabs tabList="{{tabs}}" bindtabsItemChange="tabsItemChange">
    2. tabs>
    3. <view style="height: 100rpx;">view>
    4. <block wx:for-items="{{lists}}" wx:for-item="item" wx:key="item.id">
    5. <view class="list" data-id="{{item.id}}">
    6. <view class="list-img al-center">
    7. <image class="video-img" mode="scaleToFill" src="{{item.image}}">image>
    8. view>
    9. <view class="list-detail">
    10. <view class="list-title"><text>{{item.title}}text>view>
    11. <view class="list-tag">
    12. <view class="state al-center">{{item.state}}view>
    13. <view class="join al-center"><text class="list-num">{{item.num}}text>人报名view>
    14. view>
    15. <view class="list-info"><text>{{item.address}}text>|<text>{{item.time}}text>view>
    16. view>
    17. view>
    18. block>
    19. <view class="section bottom-line">
    20. <text>到底啦text>
    21. view>
    2.1.3 样式

    在list.wxss定义:

    1. /* pages/meeting/list/list.wxss */
    2. .list {
    3. display: flex;
    4. flex-direction: row;
    5. width: 100%;
    6. padding: 0 20rpx 0 0;
    7. border-top: 1px solid #eeeeee;
    8. background-color: #fff;
    9. margin-bottom: 5rpx;
    10. /* border-radius: 20rpx;
    11. box-shadow: 0px 0px 10px 6px rgba(0,0,0,0.1); */
    12. }
    13. .list-img {
    14. display: flex;
    15. margin: 10rpx 10rpx;
    16. width: 150rpx;
    17. height: 220rpx;
    18. justify-content: center;
    19. align-items: center;
    20. }
    21. .list-img .video-img {
    22. width: 120rpx;
    23. height: 120rpx;
    24. }
    25. .list-detail {
    26. margin: 10rpx 10rpx;
    27. display: flex;
    28. flex-direction: column;
    29. width: 600rpx;
    30. height: 220rpx;
    31. }
    32. .list-title text {
    33. font-size: 11pt;
    34. color: #333;
    35. font-weight: bold;
    36. }
    37. .list-detail .list-tag {
    38. display: flex;
    39. height: 70rpx;
    40. }
    41. .list-tag .state {
    42. font-size: 9pt;
    43. color: #81aaf7;
    44. width: 120rpx;
    45. border: 1px solid #93b9ff;
    46. border-radius: 2px;
    47. margin: 10rpx 0rpx;
    48. display: flex;
    49. justify-content: center;
    50. align-items: center;
    51. }
    52. .list-tag .join {
    53. font-size: 11pt;
    54. color: #bbb;
    55. margin-left: 20rpx;
    56. display: flex;
    57. justify-content: center;
    58. align-items: center;
    59. }
    60. .list-tag .list-num {
    61. font-size: 11pt;
    62. color: #ff6666;
    63. }
    64. .list-info {
    65. font-size: 9pt;
    66. color: #bbb;
    67. margin-top: 20rpx;
    68. }
    69. .bottom-line{
    70. display: flex;
    71. height: 60rpx;
    72. justify-content: center;
    73. align-items: center;
    74. background-color: #f3f3f3;
    75. }
    76. .bottom-line text{
    77. font-size: 9pt;
    78. color: #666;
    79. }

    效果:

    三、个人中心布局

    3.1 布局

    在个人中心页面中编写 .wxml 文件如 : ucenter/index/index.wxml)进行页面显示

    布局

    index.wxml:

    1. <view class="user">
    2. <image class="user-img" src="/static/persons/8.jpg">image>
    3. <view class="user-name">Bingview>
    4. <text class="user-up">修改text>
    5. view>
    6. <view class="cells">
    7. <view class="cell-items">
    8. <image src="/static/tabBar/coding-active.png" class="cell-items-icon">image>
    9. <text class="cell-items-title">我主持的会议text>
    10. <text class="cell-items-num">5text>
    11. <text class="cell-items-detail">👍text>
    12. view>
    13. <view style="height: 5rpx;background-color: rgba(135, 206, 250, 0.075);">view>
    14. <view class="cell-items">
    15. <image src="/static/tabBar/sdk.png" class="cell-items-icon">image>
    16. <text class="cell-items-title">我参与的会议text>
    17. <text class="cell-items-num">3text>
    18. <text class="cell-items-detail">👌text>
    19. view>
    20. view>
    21. <view style="height: 27rpx;background-color: rgba(135, 206, 250, 0.075);">view>
    22. <view class="cells">
    23. <view class="cell-items">
    24. <image src="/static/tabBar/sdk.png" class="cell-items-icon">image>
    25. <text class="cell-items-title">我发布的投票text>
    26. <text class="cell-items-num">6text>
    27. <text class="cell-items-detail">👆text>
    28. view>
    29. <view style="height: 5rpx;background-color: rgba(135, 206, 250, 0.075);">view>
    30. <view class="cell-items">
    31. <image src="/static/tabBar/coding-active.png" class="cell-items-icon">image>
    32. <text class="cell-items-title">我参与的投票text>
    33. <text class="cell-items-num">8text>
    34. <text class="cell-items-detail">👇text>
    35. view>
    36. view>
    37. <view style="height: 27rpx;background-color: rgba(135, 206, 250, 0.075);">view>
    38. <view class="cells">
    39. <view class="cell-items">
    40. <image src="/static/tabBar/template.png" class="cell-items-icon">image>
    41. <text class="cell-items-title">信息text>
    42. <text class="cell-items-ion">👉text>
    43. view>
    44. <view style="height: 5rpx;background-color: rgba(135, 206, 250, 0.075);">view>
    45. <view class="cell-items">
    46. <image src="/static/tabBar/component.png" class="cell-items-icon">image>
    47. <text class="cell-items-title">设置text>
    48. <text class="cell-items-ion">👉text>
    49. view>
    50. view>

    3.2 样式

    ucenter/index/index.wxss下编写即可

    index.wxss:

    1. /* pages/ucenter/index/index.wxss */
    2. Page{
    3. background-color: rgba(135, 206, 250, 0.075);
    4. }
    5. .user{
    6. display: flex;
    7. width: 100%;
    8. align-items:center;
    9. background-color: white;
    10. margin-bottom: 28rpx;
    11. }
    12. .user-img{
    13. height: 170rpx;
    14. width: 170rpx;
    15. margin: 30rpx;
    16. border: 1px solid #cdd7ee;
    17. border-radius: 6px;
    18. }
    19. .user-name{
    20. width: 380rpx;
    21. margin-left: 20rpx;
    22. font-weight: 550;
    23. }
    24. .user-up{
    25. color: rgb(136, 133, 133);
    26. }
    27. .cells{
    28. background-color: white;
    29. }
    30. .cell-items{
    31. display: flex;
    32. align-items:center;
    33. height: 110rpx;
    34. }
    35. .cell-items-title{
    36. width: 290rpx;
    37. }
    38. .cell-items-icon{
    39. width: 50rpx;
    40. height: 50rpx;
    41. margin: 20rpx;
    42. }
    43. .cell-items-num{
    44. padding-left: 30rpx;
    45. margin-left: 200rpx;
    46. width: 70rpx;
    47. }
    48. .cell-items-ion{
    49. margin-left: 295rpx;
    50. }

    效果:

  • 相关阅读:
    http中的Content-Type类型
    [论文笔记]GPT-1
    python采集美女内容,快来学会把你喜欢的内容全部下载吧~
    《算法通关村—轻松搞定判断平衡树》
    Android Compose Column列表 数据更新列表不刷新的问题
    嵌入式设备文件系统构建——增加用户登录功能
    顺序读写函数的介绍:fputs & fgets
    使用 Webmin+bind9快速搭建私有DNS服务器
    三维大场景管理-3Dtiles规范
    【编程之路】面试必刷TOP101:链表(11-16,Python实现)
  • 原文地址:https://blog.csdn.net/m0_73192864/article/details/133902935