vue教程:封装了一个checkbox组件

简介: 工作中发现默认vue绑定checkbox很不方便,存在下面几个问题。1、如果传递的数值不是数值,那默认绑定值就会转为true或false但是作为后端人员,true或flase这类值一般都是用数值型字段来保存,比如1和0,我们后台传递出来的数据往往就直接是0或1.2、如果有多个checkbox,那就需要传递的数值是数组,但是实际中往往一组checkbox提交后台后,就是保存在一个nvarchar字段中,如果需要和前台配合,在读取的时候就需要把字符串转为数组才能实现双向绑定。

工作中发现默认vue绑定checkbox很不方便,存在下面几个问题。

1、如果传递的数值不是数值,那默认绑定值就会转为true或false但是作为后端人员,true或flase这类值一般都是用数值型字段来保存,比如1和0,我们后台传递出来的数据往往就直接是0或1.

2、如果有多个checkbox,那就需要传递的数值是数组,但是实际中往往一组checkbox提交后台后,就是保存在一个nvarchar字段中,如果需要和前台配合,在读取的时候就需要把字符串转为数组才能实现双向绑定。

基于以上原因,封装了一个checkbox组件,代码如下,希望对大家有帮助。

//ui-checkbox组件
Vue.component("ui-checkbox", {
 props: {
 value: { default: "" },
 dataSource: { default: []}
 },
 data:function(){
 return {
 checkedModel:this.value
 }
 },
 watch:{
 value:function (newValue)
 {
 if (Array.isArray(newValue))
 {
 this.checkedModel = newValue;
 }
 else
 {
 this.checkedModel = newValue.toString().split(",");
 }
 }
 },
 methods: {
 onChange: function(event)
 {
 if (this.dataSource.length <= 1)
 {
 //如果数据源只有一个,清除所有数组,保证干净的数据传递到后台。
 this.checkedModel.splice(0,this.checkedModel.length);
 }
 var $obj = event.target;
 if ($obj.checked)
 {
 if (this.checkedModel.indexOf($obj.value)<0)
 {
 this.checkedModel.push($obj.value);
 }
 }
 else
 {
 this.checkedModel.Remove($obj.value);
 }
 console.log(this.checkedModel)
 }
 },
 created: function () {
 if (Array.isArray(this.value)) {
 this.checkedModel = this.value
 }
 else {
 this.checkedModel = this.value.toString().split(",");
 }
 },
 template:`<span :data-value="checkedModel">
 <label class="checkbox-inline" v-for="item in dataSource" :key=item.value> <input type="checkbox" v-on:change="onChange($event)" :value="item.value" /> {{item.label}}</label>
 </span>`
});

单选的调用方法

<ui-checkbox v-model="CanExpand" v-on:change="CanExpand=$event" :data-source="[{value:1,label:'是否选中'}]"></ui-checkbox>

这样就可以保证选种后CanExpand的值为1,如果不选,值就为空,在后台很容易处理。
如果有多个选项,可以这样调用:

<ui-checkbox v-model="Love" v-on:change="Love=$event" :data-source="[{value:'red',label:'读书'},{value:'write',label:'写字'}]"></ui-checkbox>

在父级调用的时候,v-model可以传递逗号隔开的字符串,也可以直接传递数组,更具有实用性。

以上是本人工作中的一些小技巧,欢迎大家关注转发并讨论。

相关文章
|
2天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。
|
1天前
|
JavaScript
如何在 Vue 中使用具名插槽
【10月更文挑战第25天】通过使用具名插槽,你可以更好地组织和定制组件的模板结构,使组件更具灵活性和可复用性。同时,具名插槽也有助于提高代码的可读性和可维护性。
7 2
|
1天前
|
JavaScript
Vue 中的插槽
【10月更文挑战第25天】插槽的使用可以大大提高组件的复用性和灵活性,使你能够根据具体需求在组件中插入不同的内容,同时保持组件的结构和样式的一致性。
7 2
|
1天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
6月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
74 3
|
6月前
|
人工智能 JavaScript 前端开发
毕设项目-基于Springboot和Vue实现蛋糕商城系统(三)
毕设项目-基于Springboot和Vue实现蛋糕商城系统
|
6月前
|
JavaScript Java 关系型数据库
毕设项目-基于Springboot和Vue实现蛋糕商城系统(一)
毕设项目-基于Springboot和Vue实现蛋糕商城系统
164 0
|
6月前
|
JavaScript 前端开发 API
Vue3+Vite+TypeScript常用项目模块详解
现在无论gitee还是github,越来越多的前端开源项目采用Vue3+Vite+TypeScript+Pinia+Elementplus+axios+Sass(css预编译语言等),其中还有各种项目配置比如eslint 校验代码工具配置等等,而我们想要进行前端项目的二次开发,就必须了解会使用这些东西,所以作者写了这篇文章进行简单的介绍。
136 0
Vue3+Vite+TypeScript常用项目模块详解
|
6月前
|
设计模式 JavaScript
探索 Vue Mixin 的世界:如何轻松复用代码并提高项目性能(上)
探索 Vue Mixin 的世界:如何轻松复用代码并提高项目性能(上)
探索 Vue Mixin 的世界:如何轻松复用代码并提高项目性能(上)
|
6月前
|
前端开发 JavaScript Java
毕业设计|基于SpringBoot+Vue的科研课题项目管理系统
毕业设计|基于SpringBoot+Vue的科研课题项目管理系统
186 1