vue教程:封裝了一個checkbox組件

2020-12-27 小熊優化

工作中發現默認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 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可以傳遞逗號隔開的字符串,也可以直接傳遞數組,更具有實用性。

以上是本人工作中的一些小技巧,歡迎大家關注轉發並討論。

相關焦點

  • 【Vue.js入門到實戰教程】11-Vue Loader(下)| 編寫一個單文件 Vue 組件
    /App.vue'import 'bootstrap'import 'bootstrap/dist/css/bootstrap.min.css'...接下來,就可以正式編寫單文件組件了。編寫 ModalExample 組件我們將 vue_learning/component/slot.html 中的 modal-example 組件拆分出來,在 vue_learning/demo-project/src/components 目錄下新建一個單文件組件 ModalExample.vue,將 modal-example 組件代碼按照 Vue Loader 指定的格式填充到對應位置
  • Vue組件通信的葵花寶典
    今天我們聊一聊,面試中經常會被問及的問題,vue組件如何通信:props——常用於父子組件$emit——子組件觸發父組件事件.sync——雙向綁定語法糖(較少使用)$attrs和$listeners ——組件封裝provide和inject ——多層組件封裝$parent和$children——父子組件直接調用boradcast和dispatch ——vue2.0刪掉了EventBus
  • Vue Loader 篇(下):編寫一個單文件 Vue 組件
    /App.vue'import 'bootstrap'import 'bootstrap/dist/css/bootstrap.min.css'...接下來,就可以正式編寫單文件組件了。編寫 ModalExample 組件我們將 vue_learning/component/slot.html 中的 modal-example 組件拆分出來,在 vue_learning/demo-project/src/components 目錄下新建一個單文件組件 ModalExample.vue,將 modal-example 組件代碼按照 Vue Loader 指定的格式填充到對應位置
  • 微信小程序 | checkbox 組件,form 組件,input 組件
    checkbox 組件為一個多選框被放到 checkbox-group 組中,並在 checkbox-group(只能包含checkbox)中設置監聽事件。checkbox-group 監聽方法:--checkbox-group 就是一個 checkbox 組 有個監聽事件 bindchange,監聽數據選中和取消--> <checkbox-group bindchange="listenCheckboxChange"><!
  • 如何寫一個vue組件專題及常見問題 - CSDN
    轉自:https://www.cnblogs.com/pengchenggang/p/10880437.html如何寫好一個vue組件一個適用性良好的組件,一種是可配置項很多,另一種就是容易覆寫,從而擴展功能Vue 組件的 API 來自三部分——prop、事件和插槽:prop 允許外部環境傳遞數據給組件event 允許從組件內觸發外部環境的副作用slot
  • 「連載一」「大綱」前端框架 Vue 入門教程
    介紹本教程是基於 @vue/cli( v3) & webpack(v4) & vuex(v3) & vue-router(v3) ,且按照官方文檔,遵循目前生產項目的常用實踐,來講解如何一步一步的學習 Vue ,並搭建 Vue 應用腳手架。
  • Vue最重要的知識點:組件化開發
    再學一下vue中的組件化開發,包括全局、局部組件以及父子組件之間的通信。最後關於組件框架,後續在項目中遇到具體的需求再做說明。並且有一個很大的問題:如果多個地方都要使用到該日期呢?每次都這麼長的表達式?在Java中自然而言就會想到方法的封裝,同樣的道理,在Vue中提供了計算屬性,來替代複雜的表達式,本質也是方法:既然是方法,肯定要有返回值,頁面渲染時,可以把這個方法當成一個變量來使用。
  • Vue.js 教程:構建一個特斯拉汽車餘電計算器
    這篇教程關注的是全新的汽車駕駛體驗。電動汽車已經是公認的未來趨勢。但很多人都關心的一個問題是,電車充滿電後究竟可以跑多遠?行駛速度、氣溫和輪轂尺寸會對續航裡程有什麼影響?在本教程中,我們會使用 Vue.js 這個容易理解的 JavaScript 框架製作一個儀錶盤,通過它可以計算特斯拉電動汽車在不同情況下的行駛距離。
  • Vue框架之生命周期鉤子
    本來打算兩天時間做一個基礎入門的,畢竟教程也就一天的內容,看來計劃趕不上變化。vue中三大常用屬性的小結、生命周期鉤子的了解,以及指令的初步接觸。指令有點多,只能留到明天繼續補全了。一、回顧與生命周期補充說明三大屬性,當然vue肯定不止這些,只不過時間有限,只學下最常見的。1回顧每次new一個Vue實例都需要關聯模板,Vue會基於此模板進行視圖渲染。
  • 【Vue.js 入門到實戰教程】09-Vue 組件插槽 | 父子組件間的內容分發和插槽作用域
    學院君已經給大家演示了插槽(slot)功能的基本使用,插槽的主要作用就是在組件中分發父作用域的內容,這個父作用域可以是 Vue 全局容器(可以看作是一個全局的「根組件」),也可以是父組件。說到這裡,我們可以引用一張 Vue 官網提供的組件架構圖,實際上,一個 Vue.js 應用就是基於下面這樣的一個組件樹來組織和管理頁面元素的:我們可以把全局 Vue 實例看作一個最頂層的隱式組件,其他組件都是通過 Vue.component 在此基礎上註冊,並且這些組件之間可以相互嵌套、內容分發、數據傳遞以及事件通知來建立聯繫,從而通過一個個小組件自下而上層層疊加,最終構建出複雜的頁面布局和功能模塊
  • 前端技術:開發一個vue中央事件總線插件vue-bus
    大家都知道,一個中央事件總線bus,可以作為一個簡單的組件傳遞數據,用於解決跨級和兄弟組件通信問題,那麼,這篇文字,我將使用這種思想,將bus封裝為一個Vue的插件,可以在所有的組件間任意使用,而不需要導入bus。
  • Vue-使用vue-video-player組件
    在實際開發過程中會有添加視頻的需求在vue項目中添加視頻可以使用vue-video-player組件來實現實現步驟:1.安裝在控制臺輸入: npm install vue-video-player –s
  • 基於jsoneditor二次封裝一個可實時預覽的json編輯器組件react版
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言做為一名前端開發人員,掌握vue/react/angular等框架已經是必不可少的技能了,我們都知道,vue或react等MVVM框架提倡組件化開發
  • 詳解vue組件三大核心概念
    如果你閱讀別人寫的組件,可以從這三個部分展開,它們可以幫助你快速了解一個組件的所有功能。本文的代碼請猛戳https://github.com/ljianshu/Blog,紙上得來終覺淺,大家動手多敲敲代碼!
  • 【初級】個人分享Vue前端開發教程筆記 | 打卡每天一份勸退技能
    ❤️Vue.js是一個用來開發web界面的前端庫,輕量級,具有響應式編程和組件化的特點。v-if切換時,vue.js會有一個局部編譯/卸載的過程,因為 v-if 中的模板也可能包括數據綁定或子組件。v-if 會確保條件塊在切換當中適當地銷毀與中間內部的事件監聽器和子組件。
  • vue中組件的使用(下)
    組件系統是vue的一個重要概念。利用它,我們可以將一個大型應用項目簡化成若干層和若干個小的組件模塊,使項目和代碼結構都更加清晰明確,同時這也對項目開發效率和維護成本提供了很有利的幫助。;div>這樣的容器標籤,因為vue規定每個組件必須只有一個根元素。
  • vue2.0 子組件和父組件之間的傳值
    >剛剛我們創建的是vue基於webpack工具的一個模板項目,對於webpack和熱加載這些不熟悉的同學不必在意,我們現在不會過多關注webpack的,不過建議對vue有興趣的同學還是去了解一下webpack,它也算是vue開發中的一個必備工具接著我們進入Demo,首先我們可以刪除掉模板項目中src/components/
  • 精通react/vue組件設計之實現一個Tag(標籤)和Empty(空狀態)組件
    "辛勤勞動",而是要根據已有前端的開發經驗,總結出一套自己的高效開發的方法.作為數據驅動的領導者react/vue等MVVM框架的出現,幫我們減少了工作中大量的冗餘代碼, 一切皆組件的思想深得人心.所以, 為了讓工程師們有更多的時間去考慮業務和產品迭代,我們不得不掌握高質量組件設計的思路和方法.所以筆者將花時間去總結各種業務場景下的組件的設計思路和方法,並用原生框架的語法去實現各種常用組件的開發,希望等讓前端新手或者有一定工作經驗的朋友能有所收穫
  • 如何用純css打造類materialUI的按鈕點擊動畫並封裝成react組件
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言作為一個前端框架的重度使用者,在技術選型上也會非常注意其生態和完整性.筆者先後開發過基於vue,react,angular等框架的項目,碧如vue生態的elementUI
  • Vue2.0父子組件間通信
    然後在通過git bash 操作以下命令行:$ node -v//檢查是否已經裝好了node$ npm -v//檢查是否已經裝好了npm$ npm install --global vue-cli //安裝 vue-cli$ vue init webpack project//進入目標文件夾創建一個新項目$ cd project//進入新項目$ npm install//安裝package.json