
本文分享的checkbox组件为uni-app的内置组件checkbox,非扩展组件,两者在用法上其实大同小异,只是扩展组件的属性以及事件更多…没有本质上的区别~
《uni-app》表单组件-Checkbox组件
Checkbox,复选框,图形化界面基础组件之一,常用于复选多个选项时的业务场景,如问卷调查业务场景中的多项选择题等;
基础用法如下:
<checkbox />篮球
在基础用法下,uni-app将 启用一组内置在checkbox组件内部的默认参数(包括颜色,勾选状态,禁用状态等等),其表现形态 效果图 如下:

但 这种用法无法正常应用于实际的业务场景,原因是因为 复选框往往是成组的形式出现,哪怕这一组有且只有一个复选框选项;为了引入组的概念,因此除了 checkbox标签 之外,还额外提供了一个新的标签 checkbox-group标签,基本用法如下:
<checkbox-group>
<checkbox />
篮球
<checkbox />
足球
<checkbox />
网球
</checkbox-group>
其表现形态 效果图 如下:

通过 checkbox-group标签 的框定,使得checkbox被分为了一组~
value属性,用于代表checkbox的标识,什么是标识,简单的说就是内置在checkbox上用于被系统或者代码识别的值,这个值具有唯一性,说明如下
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| value | checkbox的标识,通过事件change可获得 | String |
代码示例如下:
<checkbox-group>
<checkbox value="bb" />篮球
<checkbox value="fb" />足球
<checkbox value="wb" />网球
</checkbox-group>
对于 标识 可能还是有小伙伴不大明白,那就再换一个说法,一个正常的checkbox往往会存在两个值:
如果值没有被区分或者干脆就没有内部的标识,试想一下,假设需要显示的值非常长,甚至是文章中的一整个段落,难道将这个段落一直在代码中进行逻辑运算吗,显然这是不合理的
<checkbox-group>
<checkbox value="这是一个关于篮球文章的段落,假设锻炼有100个汉字" />这是一个关于篮球文章的段落,假设锻炼有100个汉字
<checkbox value="这是一个关于足球文章的段落,假设锻炼有500个汉字" />这是一个关于足球文章的段落,假设锻炼有500个汉字
<checkbox value="这是一个关于网球文章的段落,假设锻炼有50个汉字" />这是一个关于网球文章的段落,假设锻炼有50个汉字
</checkbox-group>
disabled属性,用于控制checkbox是否可选中或取消选中,当复选框处于disabled状态下时,复选框的形态将 置灰 且用户 不可再进行选中/取消选中操作;
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| disabled | 当前复选框是否禁用 | Boolean | false |
代码示例如下:
<!-- disabled禁用属性 -->
<checkbox-group>
<checkbox :disabled="true" />
篮球
<checkbox disabled />
足球
<checkbox />
网球
</checkbox-group>
其表现形态展示的 效果图 如下:

checked属性,用于控制复选框是否处于选中状态,当复选框处于 :checked="true" 值时,复选框将默认选中,参数说明如下:
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| checked | 当前是否选中,可用来设置默认选中 | Boolean | false |
演示代码如下:
<!-- checked禁用属性 -->
<checkbox-group>
<checkbox :checked="true" />
篮球
<checkbox checked />
足球
<checkbox />
网球
</checkbox-group>
其表现形态展示的 效果图 如下:

color属性,用于控制复选框内部选中时勾形图标的颜色,参数说明如下:
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| color | checkbox的颜色,同css的color | String |
不同的 color值将直接作用于勾形图标的颜色,另外,由于color属性 等同与CSS的color,因此值可以是具体的 颜色,色号,rgb 以及 rgba,示例代码如下:
<!-- color颜色属性 -->
<checkbox-group>
<checkbox checked color="#FFCC33" />
篮球
<checkbox checked color="red" />
足球
<checkbox checked color="rgba(0,0,0,1)" />
网球
<checkbox checked color="rgb(0,0,0)" />
乒乓球
</checkbox-group>
其表现形态 效果图 如下:

我们在基础用法中有一个 不带任何参数的示例,虽然使用时不带任何参数,但在组件内部color色其实是有 默认值 的,这个默认值跟随平台而定;
我们知道uni-app是一个跨平台的解决方案,因此 某些属性在编译后存在一定的平台差异,在没有任何颜色设定的情况下,复选框的选中颜色有所区别,颜色会跟随系统平台的默认值而定,具体如下:
| 微信小程序、360小程序 | App、H5、百度小程序、支付宝小程序、飞书小程序、快应用、QQ小程序 | 字节跳动小程序 |
|---|---|---|
| 绿色 | 蓝色 | 红色 |
也就是说,我们在uni-app中不为checkbox设定color属性,那么选中的颜色在 微信小程序 中会显示成 绿色,在 支付宝小程序 会显示成 蓝色,在 字节跳动小程序 中会显示成 红色,如果想保证所有平台的显示一致,可以在代码中手动指定 color属性的值;
在uni-app中的事件机制完全遵循于Vue的语法,那么理所当然的checkbox的事件也遵循Vue的语法,checkbox提供了一个 change事件,注意该事件绑定的位置在 checkbox-group 上,毕竟只有在 checkbox-group 上才可以获取到这一组checkbox上的值 ,这个事件带一个默认参数,参数的值为当前的事件参数集合,说明如下:
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| @change | EventHandle | 中选中项发生改变是触发 change 事件,detail = {value:[选中的checkbox的value的数组]} |
示例代码如下:
<template>
<view class="checkbox-conatiner">
<!-- change事件 -->
<view class="checkbox-group">
<h4>change事件</h4>
<!-- change事件 -->
<checkbox-group @change="handleChange">
<checkbox value="bb" color="#FFCC33" />
篮球
<checkbox value="fb" color="red" />
足球
<checkbox value="wb" color="rgba(0,0,0,1)" />
网球
</checkbox-group>
<div>当前选中项的value值为:{{ value }}</div>
</view>
</view>
</template>
<script>
export default {
data() {
return {
value: ''
};
},
methods: {
handleChange(e) {
this.value = e.detail.value.join(';');
}
}
};
</script>
其表现形态 效果图 如下:

从效果图中可以看出,checkbox选中与取消选中时都会触发 checkbox-group 上的change事件,实际业务开发中可以在change事件中进行业务处理;
本节期望通过一个具体的示例来更加清晰的描述checkbox的用法,demo实现的功能大致如下:从data中取到checkbox的list,使用v-for指令动态生成checkbox,之后使用button获取到checkbox选中项的值
第一步:使用v-for动态生成checkbox列表;
<!-- demo示例 -->
<checkbox-group>
<checkbox v-for="item in list" :key="item.value" :value="item.value">
{{ item.title }}
</checkbox>
</checkbox-group>
<script>
export default {
data() {
return {
list: [
{
title: '篮球',
value: 'bb'
},
{
title: '足球',
value: 'fb'
},
{
title: '网球',
value: 'wb'
}
],
};
},
};
</script>
其表现形态 效果图 如下:

第二步:绑定change事件,获得选中/未选中时对于的value值;
<template>
<view class="checkbox-conatiner">
<!-- demo示例 -->
<checkbox-group @change="handleChange">
<checkbox v-for="item in list" :key="item.value" :value="item.value">
{{ item.title }}
</checkbox>
</checkbox-group>
</view>
</template>
<script>
export default {
data() {
return {
list: [
{
title: '篮球',
value: 'bb'
},
{
title: '足球',
value: 'fb'
},
{
title: '网球',
value: 'wb'
}
],
value: ''
};
},
methods: {
handleChange(e) {
this.value = e.detail.value;
}
}
};
</script>
第三步:添加按钮,并为按钮添加点击事件,在点击事件汇总获取选中值;
<!-- demo示例 -->
<checkbox-group @change="handleChange">
<checkbox v-for="item in list" :value="item.value" :key="item.value">
{{ item.title }}
</checkbox>
</checkbox-group>
<button @click="handleClick">获取选中值</button>
<script>
export default {
data() {
return {
list: [
{
title: '篮球',
value: 'bb'
},
{
title: '足球',
value: 'fb'
},
{
title: '网球',
value: 'wb'
}
],
value: ''
};
},
methods: {
handleChange(e) {
this.value = e.detail.value;
},
handleClick() {
alert(this.value.join(';'));
}
}
};
</script>
其表现形态 效果图 如下:

本文主要分享了uni-app中内置组件checkbox的一些用法,主要包括 属性如value属性,禁用属性,选中属性等,以及checkbox提供的默认事件change的使用,最后示例了一个结合v-for指令,button组件完成了一个动态生成checkbox并获取选中值的示例demo;
我们知道checkbox同样是图形化界面中的基石之一,尤其是在一些表单控件的操作界面上,它与输入框,单选框等表单组件的使用频率非常高;
(PS:都已经看到这里了,点个赞,求个关注吧,万分感谢~)
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension
我在事件管理员编辑页面中有嵌套资源,但我只想允许管理员编辑现有资源的内容,而不是添加新的嵌套资源。我的代码看起来像这样:formdo|f|f.inputsdof.input:authorf.input:contentf.has_many:commentsdo|comment_form|comment_form.input:contentcomment_form.input:_destroy,as::boolean,required:false,label:'Remove'endendf.actionsend但它在输入下添加了“添加新评论”按钮。我怎样才能禁用它,并只为主窗体保留f.ac
我目前正在尝试将ERB布局转换为HAML。这是我不断收到的错误:index.html.haml:18:syntaxerror,unexpected')'));}\n#{_hamlout.format_...这是HAML页面:.row-fluid.span6%h2TodoList.span6%h2{:style=>"text-align:right;"}document.write(today)%hr.divider.row-fluid.span6%h2.small_headNewTask=render:partial=>'layouts/form_errors',:locals=>{:
我的测试尝试访问网页并验证页面上是否存在某些元素。例如,它访问http://foo.com/homepage.html并检查Logo图像,然后访问http://bar.com/store/blah.html并检查页面上是否出现了某些文本。我的目标是访问经过Kerberos身份验证的网页。我发现Kerberos代码如下:主文件uri=URI.parse(Capybara.app_host)kerberos=Kerberos.new(uri.host)@kerberos_token=kerberos.encoded_tokenkerberos.rb文件classKerberosdefini
为现有模型生成单个文件(_form.html.erb)的命令是什么?在Rails3中工作。谢谢。 最佳答案 这听起来可能很傻,但请听我说完……当我想开始清洁时,我自己也做过几次这样的事情。以下是一个脚本,它将读取您的模式并生成必要的生成命令来重现它:require'rubygems'require'active_support/core_ext'schema=File.read('db/schema.rb')schema.scan(/create_table"(\w+)",.*?\n(.*?)\nend/m).eachdo|name