# 开关组件

# 概述

开关控件也是非常多见的表单元素了,在很多模块开发中,我们常用需要设置数据的状态:开启、关闭,固定的两种值,这是选择开关控件就是费用不错的选项了,另外还有很多情况下,当前我们点击开关时也需要设置某些区域内的控件的显示与隐藏,这是也需要写JS去处理一些业务逻辑,总体来说不够简洁,还在某些情况下,比如数据列表中也会置入开关,我们依然已开关状态开启、关闭为例,此时需要开关的点击像后台发起状态发生改变的请求等等,各种场景都要求我们要集成和增强开关按钮这个控件,因此我们对开关组件进行了封装和二次开发,下面我们会进行详细的解读;

# 组件原理

组件UI部分我们借助Layui开源的控件元素来实现的,Layui中的复选框组件的形式如下:

<div class="layui-form-item">
    <label class="layui-form-label">开关-默认开</label>
    <div class="layui-input-block">
        <input type="checkbox" checked="" name="open" lay-skin="switch" lay-filter="switchTest" lay-text="ON|OFF">
    </div>
</div>
1
2
3
4
5
6

实际效果如下图所示:

mixureSecure

以上代码就是原始的开关代码部分,也比较简洁,但是功能比较单一,很多场景还需要我们写一些业务相关的JS去实现部分功能,比如上面我们所说的点击开发时发起网络请求以及显示和隐藏某些区域控件。

# Switch组件

  • 组件:{common:switch name="is_cover" title="有封面|无封面" value="isset($info['is_cover']) ? $info['is_cover'] : 1" hidden="cover"}

  • 参数name:name参数的值is_cover表示switch组件的名称,此字段对应实体对象中的字段和数据库字段,根据业务不同可以自动修改该字段;

  • 参数title:开关标题显示值;

  • 参数value:isset($info['is_cover']) ? $info['is_cover'] : 1"绑定到该组件上的值,为空时可以设置默认值,其中1为空默认值;

  • 组件使用

那么我们如何在表单中使用单选按钮组件呢,如下:

<form class="layui-form model-form" action="">
    <div class="layui-form-item">
			<div class="layui-inline">
				<label class="layui-form-label">拼音(简):</label>
				<div class="layui-input-inline">
					<input name="code" th:value="${info['code']}" lay-verify="required" autocomplete="off" placeholder="请输入拼音(简)" class="layui-input" type="text">
				</div>
			</div>
			<div class="layui-inline">
				<label class="layui-form-label">有无封面:</label>
				<div class="layui-input-inline">
					{common:switch name="is_cover" title="有封面|无封面" value="isset($info['is_cover']) ? $info['is_cover'] : 1" hidden="cover"}
				</div>
			</div>
		</div>
		<div class="layui-form-item cover">
			<label class="layui-form-label">封面:</label>
			{upload:image name="avatar|头像|90x90|建议上传尺寸450x450" value="isset($info['avatar_url']) ? $info['avatar_url'] : ''"}
		</div>
</form>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

分析:如上所示,switch组件中有一个属性hidden="cover"设置此属性时,会自动拥有使得class中含有cover的控件或元素进行显示和隐藏,至于逻辑处理,全部有组件帮我们去完成,我们只需要会使用就OK。

  • 效果展示:

    mixureSecure