欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信小程序开发实战(10):单选、多选和开关组件

程序员文章站 2022-03-21 19:32:42
-----------支持作者请转发本文-----------1. 单选组件(radio)radio是选项按钮组件,该组件不能单独使用,必须作为radio-group的子组件使用,否则......

-----------支持作者请转发本文-----------

1.  单选组件(radio)

radio是选项按钮组件,该组件不能单独使用,必须作为radio-group的子组件使用,否则多个radio只有一个被选中。

如果要监听radio组件的触发事件,需要使用radio-group组件的bindchange属性,该属性绑定的函数需要指定一个参数(假设为event),通过event.detail.value,可获取当前选中了哪个radio

radio组件有如下3个属性。

  • value:String类型,radio组件的返回值,当radio组件被选中时,radio-group组件的change事件会返回选中radio组件的value值,也就是event.detail.value返回的值

  • checked:Boolean类型,默认值时false,表示当前radio组件是否被选中

  • disabled:Boolean类型,默认值时false,表示当前radio组件是否被禁用

下面的布局代码演示了如何使用radio组件,这段代码中,在label组件中使用了wx:for-items属性,在生成了多个radio(根据items数组元素个数),并利用当前数组元素对象的不同属性分别设置了边距(margin)、radio组件的value属性值、radio组件默认是否被选中(checked),以及radio组件后面显示的文本。

<radio-group bindchange="radioChange">
  <label style="display:block;margin:{{item.margin}}px" wx:for-items="{{items}}">
    <radio value="{{item.name}}" checked="{{item.checked}}" />{{item.value}}
  </label>
</radio-group>

布局的显示效果如图1所示。

微信小程序开发实战(10):单选、多选和开关组件

图1  radio组件的效果

实际上,这段布局代码如果不适用循环,相当于如下形式,也就是说,wx:for-items属性会循环生成多个label组件以及子组件。

<radio-group bindchange="radioChange">
  <label style="display:block;margin:10px" >
    <radio value="USA" checked="false" />美国
  </label>
  <label style="display:block;margin:20px" >
    <radio value="CHN" checked="true" />中国
  </label>
  … …
  //  省略了其他label标签
</radio-group>

要注意的是,如果radio-group中有多个radio组件的checked属性都设为true,那么系统会默认选中最后一个checked属性设为trueradio组件。

下面是完整的JavaScript代码的实现。

Page({
  data: {
    items: [
      {name: 'USA', value: '美国', margin:10},
      {name: 'CHN', value: '中国', checked: 'true',margin:20},
      {name: 'BRA', value: '巴西',margin:30},
      {name: 'JPN', value: '日本',margin:40},
      {name: 'ENG', value: '英国',margin:50},
      {name: 'FRA', value: '法国',margin:60},
    ]
  },
 
   //  相应radio组件变化的函数
  radioChange: function(e) {
    console.log('radio发生change事件,携带value值为:', e.detail.value)
  }
})

2. 多选组件(checkbox)

checkbox组件的作用是设置选中状态,可以多选,也就是可以多个checkbox放在一起,多个复选框选中后,可以获取选中的结果。checkbox必须和checkbox-group一起使用,checkbox将作为checkbox-group的子组件。

checkbox-group有一个bindchange属性,用于绑定checkbox组件变化的事件。checkbox包含如下3个属性。

  • valueString类型。checkbox组件对应的值,该值可以通过change事件的参数获得;

  • disabledBoolean类。默认值是false。用于禁用checkbox组件;

  • checkedBoolean类。默认值是false。用于设置checkbox组件当前是否被选中,可用来设置默认选中; 

下面的布局代码通过wx:for-items循环生成了6checkbox组件,这些组件都在checkbox-group中。

<view style="margin:20px">
  <checkbox-group bindchange="checkboxChange">
    <label style="display: block; margin-bottom: 10px;" wx:for-items="{{items}}">
      <checkbox value="{{item.name}}" checked="{{item.checked}}" />{{item.value}}
    </label>
  </checkbox-group>
</view>

其中items变量和checkboxChange函数的代码如下:

Page({
  data: {
    items: [
      {name: 'shenyang', value: '沈阳',checked: 'true'},
      {name: 'beijing', value: '北京'},
      {name: 'hangzhou', value: '杭州'},
      {name: 'xian', value: '西安'},
      {name: 'wuhan', value: '武汉'},
      {name: 'shenzhen', value: '深圳'},
    ]
  },
  checkboxChange: function(e) {
    console.log('checkbox发生change事件,携带value值为:', e.detail.value)
  }
})

运行后,可以选中前三个checkbox组件,效果如图2所示。

微信小程序开发实战(10):单选、多选和开关组件

图2  checkbox组件效果

当选中前三个checkbox组件后,会输出如图3所示的日志信息。

微信小程序开发实战(10):单选、多选和开关组件

图3 选中checkbox组件时输出的日志信息

3. 开关组件(switch)

switch组件用于设置二值切换,可以有两种风格,分别是iOSAndroid风格,默认是iOS风格。该组件有如下3个属性。

  • checkedBoolean类型,默认值是false,表示默认是否选中switch组件

  • typeString类型,默认值是switch,该属性值还可以是checkbox。其中,switchiOS风格的开关组件,checkboxAndroid风格的开关组件(也称为复选框组件)

  • bindchangeEventHandle类型,checked改变时触发change事件(假设event为事件函数的参数),通过event.detail.value可以获得switch当前选中的状态(truefalse

下面的布局代码同时演示了iOSAndroid风格的switch组件的效果,并使用label组件将一个文本和指定switch组件进行绑定。并且4switch组件都和switchChange函数绑定,当checked变化时,switchChange函数会被调用。

<view style="flex-direction:column;display:flex">
  <label>
<switch style="margin:20px;" checked="{{switch1Checked}}"        
          bindchange="switchChange"/>
    <text>Switch1</text>
  </label>
  <label>
<switch style="margin:20px;" checked="{{switch2Checked}}"
bindchange="switchChange" />
    Switch2
  </label>
  <label>
<switch style="margin:20px;" checked="{{switch1Checked}}" bindchange="switchChange"
         type="checkbox" />
Checkbox
  </label>
  <label>
<switch style="margin:20px;" checked="{{switch2Checked}}" bindchange="switchChange"
         type="checkbox" />
Checkbox
  </label> 
</view>

布局的显示效果如图4所示。

微信小程序开发实战(10):单选、多选和开关组件

图4  switch组件的两种风格演示

完整的JavaScript实现代码如下:

var pageData = {
  data: {
    switch1Checked: true,
    switch2Checked: false,
  }
  ,
  switchChange:function (e)
{
    console.log(e.detail.value);
  }
}
Page(pageData) 

当点击switch组件时,会在Console中输入如图5所示的日志信息。如果经测试发现,尽管点击switch组件后的文本可以触发switch组件,但却无法触发change事件,这可能是一个bug,估计以后版本会有所改进。

微信小程序开发实战(10):单选、多选和开关组件

图5  选择switch组件时输出的日志信息

往期回顾:

微信小程序开发实战(6):基础组件(text、icon和progress)

微信小程序开发实战(7):Button组件详解

微信小程序开发实战(8):可与其他组件绑定的文本组件(label)

微信小程序开发实战(9):单行输入和多行输入组件

-----------支持作者请转发本文-----------

对本文感兴趣,可以加李宁老师微信公众号(unitymarvel):

微信小程序开发实战(10):单选、多选和开关组件

关注  极客起源  公众号,获得更多免费技术视频和文章。

微信小程序开发实战(10):单选、多选和开关组件

本文地址:https://blog.csdn.net/nokiaguy/article/details/107374066

相关标签: java