当前位置: 首页 > news >正文

《微信小程序开发从入门到实战》学习二十八

3.4 开发参与投票页面

3.4.3 使用radio单项选择器组件

逻辑层的数据已经准备好,现在实现视图层的页面展示。

投票的标题、,描述、截止日期、是否匿名等信息通过view和text组件就可以展示。比较特别的是投票选项的展示,涉及到单选还是多选,现在使用radio实现单选的功能,radio组件结合radio-group组件一起使用,一个radio组件代表一个选项。现在了解radio和radio-group常用属性。

radio常用属性:

value                单个radio组件的值

checked            当前是否选中

disabled            是否禁用

color                 radio颜色

radio-group常用属性:

bindchange                内部radio选项改变时触发的事件处理函数,可以通过event.detail.value获取到选中的radio组件的值

现在在pages/vote/vote.wxml用radio组件实现单选投票的功能,代码如下:

<view class="container">

  <view class="title">{{voteTitle}}</view>

  <view class="desc">

    {{voteDesc}}

    <text class="multi-radio">[{{type === 'multiVote'?'多选':'单选'}}]</text>

    <text class="anonymouType">[{{isAnonymous?'匿名':'实名'}}]</text>

  </view>

  <radio-group class="option-list" bindchange="onPickOption">

    <view class="option" wx:for="{{optionList}}" wx:key="index">

      <radio value="{{index}}" disabled="{{isExpired}}">{{item}}</radio>

    </view>

  </radio-group>

  <view class="end-date">

    截止日期:{{endDate}}

    <text class="expired" hidden="{{!isExpired}}">[已过期]</text>

  </view>

  <button class="btn" type="primary" disabled="{{isExpired || pickedOption.length === 0}}" bind:tap="onTapValue"> 完成</button>

</view>

这里text使用了hidden属性,是所有组件都支持的一个属性,值为boolean类型,为true时组件会被隐藏。

radio组件的value使用了数组的角标,数组是有序集合,具有唯一性,且在传输投票数据和存储数据占用的数据量小很多。

在JS文件中增加radio组件改变时的事件处理函数和确认投票时的button组件点击时的事件处理函数,代码如下:

onPickOption(e){

    // 更新选择的项

    this.setData({

      pickedOption: [

        e.detail.value

      ]

    })

  },

  onTapValue(){

    console.log("onTapValue")

    const postData = {//需要提交的数据

      voteID: this.data.voteID,

      pickedOption: this.data.pickedOption

    }

    // TODO 将postData数据上传到服务器端

  }

表单数据的提交不一定是form组件和form-type属性指定的事件处理函数,在button的点击事件处理函数也可以向服务器端提交数据。

接下来在WXSS添加样式:

/* pages/vote/vote.wxss */

.container {

  padding:30rpx;

  box-sizing: border-box;

}

.title {

  columns:#333;

  font-weight: bold;

  font-size: 20pt;  

}

.desc{

  font-size: 14pt;

  margin-top: 40rpx;

}

.multi-radio{

  margin-left: 10rpx;

  color: #09BB07;

}

.anonymouType{

  margin-left: 10rpx;

  color:#ccc;

}

.option-list{

  margin-top: 40rpx;

}

.option{

  margin-top: 10rpx;

}

.end-date{

  margin-top: 40rpx;

  font-size: 12pt;

  color:#ccc;

}

.expired{

  margin-left: 10rpx;

  color: #CE3C39;

}

.btn{

  margin-top: 40rpx;

}

当投票未过期时,预览效果如下:

当投票过期时,预览效果如下:

调试器AppData修改isExpired值可以实现过期的预览效果

http://www.lryc.cn/news/241372.html

相关文章:

  • 2824. 统计和小于目标的下标对数目 : 详解 “左找右“ “右找左“ 两种方式
  • windows电脑定时开关机设置
  • 微信小程序取消自定义默认标题
  • Vue3鼠标拖拽生成区域块并选中元素
  • [深度理解] 重启 Splunk Search Head Cluster
  • Python + Docker 还是 Rust + WebAssembly?
  • [汇编实操]DOSBox工具: unable to open input file: 文件名.asm问题解决
  • Windows安装MongoDB
  • HandBrake 1.7 近日发布
  • Vue3的watch使用介绍及场景
  • Java设计原则和设计模式
  • webshell之基于框架免杀
  • QT QJsonObject 插入 QByteArray十六进制数据
  • 概要设计文档案例分享
  • 微服务qiankun通信方式
  • 【Azure 架构师学习笔记】-Azure Storage Account(7)- 权限控制
  • 听GPT 讲Rust源代码--src/tools(2)
  • 【python学习】基础篇-常用模块-collections模块:数据结构,如列表、元组、字典和集合等
  • 【电路笔记】-电源电压
  • kali部署ARL灯塔资产系统及使用教程
  • 一、用户管理
  • Could not publish to the server. java.lang.NullPointerException
  • SpringMVC(三)
  • 打印菱形-第11届蓝桥杯选拔赛Python真题精选
  • 『亚马逊云科技产品测评』活动征文|搭建Squoosh图片在线压缩工具
  • 基于亚马逊云科技大语言模型等服务打造企业知识库
  • FFmpeg 使用
  • NLP的使用
  • Navicat DML 操作
  • Springboot-热部署-IDEA2023