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可以传递逗号隔开的字符串,也可以直接传递数组,更具有实用性。

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

相关文章
|
4天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
vue学习第四章
|
4天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
vue学习第九章(v-model)
|
4天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
vue学习第十章(组件开发)
|
10天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
10天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
10天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
10天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
9天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
11天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
9天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
下一篇
无影云桌面