• 微信小程序开发系列(三十五)·自定义组件的属性properties


    微信小程序开发系列(三十四)·自定义组件的创建、注册以及使用(数据和方法事件的使用)_wx小程序组件开发-CSDN博客

    目录

    1.  组件的属性

    2.  组件的使用

    3.  细节描述


    1.  组件的属性

            Properties是指组件的对外属性,主要用来接收组件使用者传递给组件内部的数据,和data一同用于组件的模板渲染。

            找到上一章节的如下位置:

            可以看到Properties所在的位置,由于这个组件实在首页使用的,因此我们需要找到首页位置。

    2.  组件的使用

            找到index.wxml文件,编写如下代码,给custom-checkbox附加属性:

    1. <!-- <button type="warn" bind:tap="getData">获取数据</button> -->
    2. <button type="primary" bind:tap="delHandler">删除商品</button>
    3. <view class="line"></view>
    4. <!-- label 文本显示的内容 -->
    5. <!-- position 控制文本显示的位置 -->
    6. <custom-checkbox label="我已阅读并同意 用户协议 和 隐私协议" position="right" />
    7. <view class="line"></view>
    8. <custom-checkbox label="匿名提交" position="left" />

            目前给组件内部创建了两个属性,这就需要到组件内部进行接收,找到Properties所在的位置编写如下代码进行接收:

    1. /**
    2. * 组件的属性列表:组件的对外属性,主要用来接收组件使用者传递给组件内部的属性以及数据
    3. */
    4. properties: {
    5. //如果需要接受传递的属性,有两种方式:全写、简写
    6. //全写
    7. //label: String
    8. //简写
    9. label:{
    10. //type 组件使用者传递的数据类型
    11. //数据类型:StringNumberBooleanObject、Array
    12. //也可以设置为null,表示不限制类型
    13. type: String,
    14. value: ''
    15. },
    16. position:{
    17. type: String,
    18. value: 'right'
    19. }
    20. },

            找到文件custom-checkbox.wxml,进行渲染接收到的信息:

    1. <view>
    2. <text>{{ label }}</text>
    3. </view>

            此时刚刚编写的就可以显示出来了: 

            对此时的布局不满意我们也可以对其样式进行更改,找到custom-checkbox.scss文件,编写代码:

    1. .custom-checkbox-box{
    2. display: flex;
    3. align-self: center;
    4. }

            使用  display: flex;可以使复选框和文本在同一行展示,使用  align-self: center;可以在垂直方向居中。

            为了调动复选框在左边还是在右边显示,可以根据类名.left和.right来分别设置不同的 flex 方向。我们可以先找到custom-checkbox.scss文件,创建.custom-checkbox-box.left和.custom-checkbox-box.right:

    1. .custom-checkbox-box.left{
    2. flex-direction: row-reverse;
    3. }
    4. .custom-checkbox-box.right{
    5. flex-direction: row;
    6. }

            然后找到custom-checkbox.wxml文件,更改代码,使用三目运算符进行判断:

      <view class="custom-checkbox-box {{ position === 'right' ? 'right' : 'left' }}">

            文章开头,我们编写的代码:

    1. <!-- <button type="warn" bind:tap="getData">获取数据</button> -->
    2. <button type="primary" bind:tap="delHandler">删除商品</button>
    3. <view class="line"></view>
    4. <!-- label 文本显示的内容 -->
    5. <!-- position 控制文本显示的位置 -->
    6. <custom-checkbox label="我已阅读并同意 用户协议 和 隐私协议" position="right" />
    7. <view class="line"></view>
    8. <custom-checkbox label="匿名提交" position="left" />

            对position进行判断:

    3.  细节描述

            在这里程序基本完成,不过在运行玩以后通过“调试器”,我们可以看到复选框的右侧会有一些间隙,但是左侧没有:

            为了样式的好看,我们可以为复选框左侧添加一些样式,添加类名class="custom-checkbox":

        <checkbox class="custom-checkbox" checked="{{ isChecked }}" bind:tap="updateChecked"></checkbox>

            然后找到找到custom-checkbox.scss文件,编写:

    1. .custom-checkbox{
    2. margin-left: 10rpx;
    3. }

            这里若是我们想要获取复选框当前状态,可以找到custom-checkbox.js文件,编写如下代码:

          console.log(this.properties.label)

            我们也可以在组件内部进行修改:

            label:'在组件内部也可以修改 properties 中的数据'

            此时custom-checkbox.js文件完整代码:

    1. // components/custom-checkbox/custom-checkbox.js
    2. Component({
    3. /**
    4. * 组件的属性列表:组件的对外属性,主要用来接收组件使用者传递给组件内部的属性以及数据
    5. */
    6. properties: {
    7. //如果需要接受传递的属性,有两种方式:全写、简写
    8. //全写
    9. //label: String
    10. //简写
    11. label:{
    12. //type 组件使用者传递的数据类型
    13. //数据类型:StringNumberBooleanObject、Array
    14. //也可以设置为null,表示不限制类型
    15. type: String,
    16. value: ''
    17. },
    18. position:{
    19. type: String,
    20. value: 'right'
    21. }
    22. },
    23. /**
    24. * 组件的初始数据:用来定义当前组件内部所需要的数据
    25. */
    26. data: {
    27. isChecked:false
    28. },
    29. /**
    30. * 组件的方法列表:在组件中所有的事件处理程序,都需要写到methods方法中
    31. */
    32. methods: {
    33. // 更新复选框状态
    34. updateChecked(){
    35. // 通过取反isChecked的值来获取每次事件点击后的值
    36. // 例如初始时false,点击后为true,即对false取反
    37. this.setData({
    38. isChecked:!this.data.isChecked,
    39. label:'在组件内部也可以修改 properties 中的数据'
    40. })
    41. // console.log(this.properties.label)
    42. }
    43. }
    44. })

            此时custom-checkbox.scss文件完整代码:

    1. /* components/custom-checkbox/custom-checkbox.wxss */
    2. .custom-checkbox-container{
    3. display: inline-block;
    4. }
    5. .custom-checkbox-box{
    6. display: flex;
    7. align-self: center;
    8. }
    9. .custom-checkbox-box.left{
    10. flex-direction: row-reverse;
    11. }
    12. .custom-checkbox-box.right{
    13. flex-direction: row;
    14. }
    15. .custom-checkbox{
    16. margin-left: 10rpx;
    17. }

     微信小程序开发_时光の尘的博客-CSDN博客

  • 相关阅读:
    Error: svn: E155004: Run ‘svn cleanup‘ to remove locks
    【Linux】常见指令(下)
    9月21日,每日信息差
    COMSOL----微阻梁模型的搭建---最终的温度分布和变形情况----几何模型的建立
    thinkphp 自定义错误页面
    021-Java对象类型转换,instanceof语句使用方法
    【Kettle】 Kettle连接Clickhouse自定义插件2.0(升级驱动)
    35.认识线程安全【20220813】
    图片上传并映射回显
    Mybatis实现分页查询
  • 原文地址:https://blog.csdn.net/MANONGDKY/article/details/136783573