目前,市面上主流的Vue組件庫大概就是iview, element。
固然,heyui不在範圍內,38個star屈指可數,大部分仍是認識的同事。
更可惡的仍是騙不來後端同窗的star,心塞。javascript
求Star(小💕💕):Github
css
官網: www.heyui.tophtml
對比呢,我總共出了幾個緯度:前端
element,iview都支持按需加載。
heyui不支持。
關於支不支持按需加載,思考了好久。
也許element, iview還能夠,可是若是heyui拆分組件使用,總體優點不大,後面我再介紹。vue
其實,這裏三個組件都是差很少的。 element使用scss,iview和heyui使用less,使用變量覆蓋的方式就能夠了。
element提供了一個主題生成的工具,對應iview也有一個,可是這是一開始的方式了,如今你們都是推薦變量覆蓋的方式。
這裏,我就要推薦咱們的腳手架hey-cli,我把這些變量不是採用覆蓋的方式,而是使用全局化的方式。
這樣,你的@primary-color同樣能夠在vue的<style lang="less"/>
中使用。
參考:hey-cli-template中heyui的demo
或者能夠看一下:前端開發大殺器hey-clijava
element,iview都支持國際化。
heyui不支持。
傷心。
嗯嗯,若是須要國際化支持的項目,請移步element,iview。
我想說,其實heyui國際化的機制都已經寫好了,缺翻譯人員support,有意願的人能夠找我哦。git
其實按需加載與國際化都屬於極少數的需求,按需加載,我應該不會作這一方面的支持的。
若是有一些不一樣意見的人,歡迎討論。
PS: 按需加載仍是須要加載全部的樣式的。
至於國際化,若是有需求或者能夠提供幫助的人,歡迎聯繫。github
主要的功能對比來了。npm
Transfer 穿梭框
或者與Cascader 級聯選擇
,功能更強大。Cascader 級聯選擇
組件實際上是相似的功能,可是heyui支持單選,多選,key模式與對象模式。heyui沒有的組件:後端
其實,這個是三個組件庫的比對。
若是單獨從有沒有某種組件來判斷,其實element和iview的組件庫是很是相似的。
而對於heyui,從個人開發初衷來看,我注重的主要是通用性,擴展性。
從上面的比對上來看,heyui沒有不少的樣式組件,其實一開始參考了iview與element,開發了tag與panel。
事實發現,不多用到。
由於每個系統的設計師都擁有不一樣的想法。
相反,我開發了Extend 樣式擴展,這個主要是從經驗上總結出來的,適用性很廣。
還開發了DropdownCustom 下拉控件,這些對於擴展性上面來講更好。
其實element與iview之間的組件調用,大體類似。
主要在一些細節功能上,有一些差異。
element用的是 短橫線分隔式命名,例:h-table
iview和heyui用的是 駝峯式命名,例:Table
這一點上面,iview與heyui比較有優點,代碼可讀性上面優點更大一些。
element在組件的功能性上面總體佔優點。
大多數組件提供的功能都比較多。
就以table組件來講,參數是兩頁屏幕都看不完,iview比heyui更多。
可是像tree或者autocomplete,heyui的實現更底層,更易擴展,比element和iview複雜的多。
其實這個單獨拿出來講,我是有私心的,誰讓我是heyui的做者。
接下來展現的是heyui的最大的一個特點。 那就是全局配置,以及數據驅動。
咱們以最簡單的Select組件爲例子。
Element的調用方式
<template>
<el-select v-model="value" placeholder="請選擇">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</template>
<script> export default { data() { return { options: [{ value: '選項1', label: '黃金糕' }, { value: '選項2', label: '雙皮奶' }, { value: '選項3', label: '蚵仔煎' }, { value: '選項4', label: '龍鬚麪' }, { value: '選項5', label: '北京烤鴨' }], value: '' } } } </script>
複製代碼
iView的調用方式
<template>
<el-select v-model="value" placeholder="請選擇">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</template>
<script> export default { data() { return { options: [{ value: '選項1', label: '黃金糕' }, { value: '選項2', label: '雙皮奶' }, { value: '選項3', label: '蚵仔煎' }, { value: '選項4', label: '龍鬚麪' }, { value: '選項5', label: '北京烤鴨' }], value: '' } } } </script>
複製代碼
HeyUI的調用方式
<template>
<div v-padding="40">
<Radio v-model="value" :datas="options"></Radio>
<div v-height="20"></div>
<Select v-model="value" :datas="options" placeholder="請選擇"></Select>
<div v-height="20"></div>
<Tabs v-model="value" :datas="options"></Tabs>
</div>
</template>
<script> export default { data() { return { options: [ { key: "a", title: "黃金糕" }, { key: "b", title: "雙皮奶" }, { key: "c", title: "蚵仔煎" }, { key: "d", title: "龍鬚麪" }, { key: "e", title: "北京烤鴨" } ], value: "a" }; } }; </script>
複製代碼
實際效果
這裏就只是簡單的說明,後期我會着重在這一個功能上面寫一篇文章。
這裏,其實我仍是比較在乎的,畢竟項目的大小和依賴仍是比較重要的。
哈哈,感受HeyUI有一點完勝的感受。
這裏我也比較客觀的說一下,Element的JS大小的確比較大,主要是由於發佈的時間比較長,逐步增長的功能比較多,你去看看Table的組件就能夠理解。
而後iView的CSS一開始是直接用的Ant Design的,其實Ant Design的設計相對來講更華麗一些,因此CSS相對來講比較大一些,不事後期iView作了大量的改版,已經和Ant Design區別很大了,就是CSS的大小依舊沒有降下來。
而HeyUI的全部組件都是本身寫的,相對DOM的結構都比較簡潔一些。
而個人設計想法比較多的是交互機制,比較在乎一些核心的問題,相對來講,功能我不會作的大而全,另外,使用的用戶也能夠更方便擴展。
而element與iview,其實主要的是依賴async-validator
與deepmerge
,還有popper.js
。
其實deepmerge
我本身寫的hey-utils
裏面也有啦。
async-validator
,其實我本身寫了hey-validator。
由於前期改動比較大,就沒有單獨出來,後面已經把代碼獨立出來了。
不過heyui
仍是直接用的源碼。
就像前面說的,我必定是得了只能用本身寫的代碼的病!!!(堅強)
不過,heyui也在諸多線上的系統運行,也運行了快一年了,相對來講,bug數量也屈指可數。
這裏我就不放npm下載量的一些對比了。
其實Element不論是star數量或者是issues的數量都是嗷嗷領先,可是這並不表明Element更具有優點,其實我本身在寫vue組件庫,這兩個組件庫我仍是比較清楚的。
相對來講,star數量對於我來講就沒有很大的參考量了,畢竟iView的推廣也很是的好。
你們看看就好,我眼饞一下就好,主要仍是上面的一些對比。
感受這一篇文章應該沒有不少人看,大概是作給我本身看的。 heyui與element和iview相比,並無不好,有不少不少亮眼的功能,但願你們給heyui多一些展現的機會,多一些嘗試的機會。