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

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

相关文章
|
25天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
127 1
|
4天前
|
JavaScript 安全 API
iframe嵌入页面实现免登录思路(以vue为例)
通过上述步骤,可以在Vue.js项目中通过 `iframe`实现不同应用间的免登录功能。利用Token传递和消息传递机制,可以确保安全、高效地在主应用和子应用间共享登录状态。这种方法在实际项目中具有广泛的应用前景,能够显著提升用户体验。
30 8
|
2月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
167 64
|
5天前
|
存储 设计模式 JavaScript
Vue 组件化开发:构建高质量应用的核心
本文深入探讨了 Vue.js 组件化开发的核心概念与最佳实践。
32 1
|
5天前
|
资源调度 JavaScript 前端开发
创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】
这是一篇关于创建Vue项目的详细指南,涵盖从环境搭建到项目部署的全过程。
42 1
|
1月前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
64 8
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
1070 0
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
59 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
55 1