> 当剿’ä»¶ä¸åŒ…å«ç¤ºä¾‹é¡µé¢ ,如需示例请在 HBuiderX 䏿–°å»º `hello uni-app > 扩展组件` 䏿Ÿ¥çœ‹ > > 代ç ç¤ºä¾‹åœ°å€ ï¼š[https://ext.dcloud.net.cn/plugin?id=4941](https://ext.dcloud.net.cn/plugin?id=4941) > > 组件演示地å€ï¼š[https://hellouniapp.dcloud.net.cn](https://hellouniapp.dcloud.net.cn/pages/extUI/badge/badge) > > 组件文档地å€ï¼š[https://uniapp.dcloud.io/component/uniui/uni-ui](https://uniapp.dcloud.io/component/uniui/uni-ui) # uni-ui ä»‹ç» ## uni-ui产å“特点 ### 1. 高性能 ç›®å‰ä¸ºæ¢ï¼Œåœ¨å°ç¨‹åºå’Œæ··åˆapp领域,暂时还没有比 `uni-ui` 更高性能的框架。 - è‡ªåŠ¨å·®é‡æ›´æ–°æ•°æ® 虽然uni-app支æŒå°ç¨‹åºè‡ªå®šä¹‰ç»„件,所有å°ç¨‹åºçš„ui库都å¯ä»¥ç”¨ã€‚但å°ç¨‹åºè‡ªå®šä¹‰ç»„ä»¶çš„ui库都需è¦ä½¿ç”¨setData手动更新数æ®ï¼Œåœ¨å¤§æ•°æ®é‡æ—¶ã€æˆ–é«˜é¢‘æ›´æ–°æ•°æ®æ—¶ï¼Œå¾ˆå®¹æ˜“产生性能问题。 而 `uni-ui` 属于vue组件,uni-app引擎底层自动diffæ›´æ–°æ•°æ®ã€‚当然其实æ’件市场里众多vue组件都具备这个特点。 - ä¼˜åŒ–é€»è¾‘å±‚å’Œè§†å›¾å±‚é€šè®¯æŠ˜æŸ éžH5,ä¸ç®¡æ˜¯å°ç¨‹åºè¿˜æ˜¯App,ä¸ç®¡æ˜¯appçš„webview渲染还是原生渲染,全都是逻辑层和视图层分离的。这里就有一个逻辑层和视图层通讯的折æŸé—®é¢˜ã€‚ 比如在视图层拖动一个å¯è·Ÿæ‰‹çš„组件,由于通讯的æŸè€—,用js监å¬å¾ˆéš¾åšåˆ°å®žæ—¶è·Ÿæ‰‹ã€‚ 这时就需è¦ä½¿ç”¨css动画以åŠå¹³å°åº•层æä¾›çš„wxsã€bindingxç‰æŠ€æœ¯ã€‚ä¸è¿‡è¿™äº›æŠ€æœ¯éƒ½æ¯”è¾ƒå¤æ‚,所以 `uni-ui` 里åšäº†å°è£…,在需è¦è·Ÿæ‰‹å¼æ“作的ui组件,比如swiperaction列表项左滑èœå•,就在底层使用了这些技术,实现了高性能的交互体验 - èƒŒæ™¯åœæ¢ 很多ui组件是会一直动的,比如轮æ’图ã€è·‘马ç¯ã€‚å³ä¾¿è¿™ä¸ªçª—体被新窗体挡ä½ï¼Œå®ƒåœ¨èƒŒæ™¯å±‚ä»ç„¶åœ¨æ¶ˆè€—ç€ç¡¬ä»¶èµ„æºã€‚在Androidçš„webview版本为chrome66以上,背景æ“作ui会引å‘很严é‡çš„æ€§èƒ½é—®é¢˜ï¼Œé€ æˆå‰å°ç•Œé¢æ˜Žæ˜¾å¡é¡¿ã€‚ 而 `uni-ui` 的组件,会自动判æ–自己的显示状æ€ï¼Œåœ¨ç»„ä»¶ä¸å†å¯è§æ—¶ï¼Œä¸ä¼šå†æ¶ˆè€—硬件资æºã€‚ ### 2. 全端 `uni-ui` 的组件都是多端自适应的,底层会抹平很多å°ç¨‹åºå¹³å°çš„差异或bug。 比如导航æ navbar组件,会自动处ç†ä¸åŒç«¯çš„çŠ¶æ€æ 。 比如swiperaction组件,在app和微信å°ç¨‹åºä¸Šä¼šä½¿ç”¨äº¤äº’体验更好的wxsæŠ€æœ¯ï¼Œä½†åœ¨ä¸æ”¯æŒwxs的其他å°ç¨‹åºç«¯ä¼šä½¿ç”¨js模拟类似效果。 `uni-ui` 还支æŒnvue原生渲染,[详è§](https://github.com/dcloudio/uni-ui/tree/nvue-uni-ui) æœªæ¥ `uni-ui` 还会支æŒpcç‰å¤§å±è®¾å¤‡ã€‚ ### 3. 与uni统计自动集æˆå®žçް兿‰“点 uni统计是优秀的多端统计平å°ï¼Œè§[tongji.dcloud.net.cn](https://tongji.dcloud.net.cn)。 é™¤äº†ä¸€å¼ æŠ¥è¡¨çœ‹å…¨ç«¯ï¼Œå®ƒçš„å¦ä¸€ä¸ªé‡è¦ç‰¹ç‚¹æ˜¯å…打点。 比如使用 `uni-ui` çš„navbaræ ‡é¢˜æ ã€æ”¶è—ã€è´ç‰©è½¦ç‰ç»„件,å‡å¯å®žçŽ°è‡ªåŠ¨æ‰“ç‚¹ï¼Œç»Ÿè®¡é¡µé¢æ ‡é¢˜ç‰å„ç§è¡Œä¸ºæ•°æ®ã€‚ å½“ç„¶ä½ ä¹Ÿå¯ä»¥å…³é—uniç»Ÿè®¡ï¼Œè¿™ä¸æ˜¯å¼ºåˆ¶çš„。 ### 4. 主题扩展 `uni-ui` 支æŒ[uni.scss](https://uniapp.dcloud.io/collocation/uni-scss),å¯ä»¥æ–¹ä¾¿çš„切æ¢Appçš„é£Žæ ¼ã€‚ ui是一ç§éœ€æ±‚éžå¸¸å‘散的产å“,DCloudå®˜æ–¹ä¹Ÿæ— æ„用 `uni-ui` 压制第三方uiæ’ä»¶çš„ç©ºé—´ï¼Œä½†å®˜æ–¹æœ‰ä¹‰åŠ¡åœ¨æ€§èƒ½å’Œå¤šç«¯æ–¹é¢æä¾›ä¸€ä¸ªå¼€æºçš„æ ‡æ†ç»™å¤§å®¶ã€‚ 我们欢迎更多优秀的ui组件出现,也欢迎更多人贡献 `uni-ui` çš„ä¸»é¢˜é£Žæ ¼ï¼Œæ»¡è¶³æ›´å¤šç”¨æˆ·çš„éœ€æ±‚ã€‚ ## 快速开始 uni-uiæ”¯æŒ HBuilderX直接新建项目模æ¿ã€npm安装和å•独导入个别组件ç‰å¤šç§ä½¿ç”¨æ–¹å¼ ### 在HBuilderX 新建uni-app项目的模æ¿ä¸ï¼Œé€‰æ‹©uni-uiæ¨¡æ¿  由于uni-app独特的[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)技术,å¯ä»¥å…å¼•ç”¨ã€æ³¨å†Œï¼Œç›´æŽ¥ä½¿ç”¨å„ç§ç¬¦åˆè§„则的vue组件。 在代ç 区键入`u`,拉出å„ç§å†…置或uni-ui的组件列表,选择其ä¸ä¸€ä¸ªï¼Œå³å¯ä½¿ç”¨è¯¥ç»„件。 å…‰æ ‡æ”¾åœ¨ç»„ä»¶å称上,按F1,å¯ä»¥æŸ¥é˜…组件的文档。  ### 通过 uni_modules å•独安装组件 å¦‚æžœä½ æ²¡æœ‰åˆ›å»ºuni-ui项目模æ¿ï¼Œä¹Ÿå¯ä»¥åœ¨ä½ 的工程里,通过 uni_modules å•独安装需è¦çš„æŸä¸ªç»„ä»¶ã€‚ä¸‹è¡¨ä¸ºuni-ui的扩展组件清å•,点击æ¯ä¸ªç»„件在详情页é¢å¯ä»¥å¯¼å…¥ç»„件到项目下,导入åŽç›´æŽ¥ä½¿ç”¨å³å¯ï¼Œæ— 需import和注册。 |组件å|组件说明| |---|---| |uni-badge|[æ•°å—è§’æ ‡](https://ext.dcloud.net.cn/plugin?name=uni-badge)| |uni-calendar|[日历](https://ext.dcloud.net.cn/plugin?name=uni-calendar)| |uni-card|[å¡ç‰‡](https://ext.dcloud.net.cn/plugin?name=uni-card)| |uni-collapse|[折å 颿¿](https://ext.dcloud.net.cn/plugin?name=uni-collapse)| |uni-combox|[ç»„åˆæ¡†](https://ext.dcloud.net.cn/plugin?name=uni-combox)| |uni-countdown|[倒计时](https://ext.dcloud.net.cn/plugin?name=uni-countdown)| |uni-data-checkbox|[æ•°æ®é€‰æ‹©å™¨](https://ext.dcloud.net.cn/plugin?name=uni-data-checkbox)| |uni-data-picker|[æ•°æ®é©±åŠ¨çš„picker选择器](https://ext.dcloud.net.cn/plugin?name=uni-data-picker)| |uni-dateformat|[æ—¥æœŸæ ¼å¼åŒ–](https://ext.dcloud.net.cn/plugin?name=uni-dateformat)| |uni-datetime-picker|[日期选择器](https://ext.dcloud.net.cn/plugin?name=uni-datetime-picker)| |uni-drawer|[抽屉](https://ext.dcloud.net.cn/plugin?name=uni-drawer)| |uni-easyinput|[增强输入框](https://ext.dcloud.net.cn/plugin?name=uni-easyinput)| |uni-fab|[悬浮按钮](https://ext.dcloud.net.cn/plugin?name=uni-fab)| |uni-fav|[æ”¶è—æŒ‰é’®](https://ext.dcloud.net.cn/plugin?name=uni-fav)| |uni-file-picker|[æ–‡ä»¶é€‰æ‹©ä¸Šä¼ ](https://ext.dcloud.net.cn/plugin?name=uni-file-picker)| |uni-forms|[表å•](https://ext.dcloud.net.cn/plugin?name=uni-forms)| |uni-goods-nav|[商å“导航](https://ext.dcloud.net.cn/plugin?name=uni-goods-nav)| |uni-grid|[å®«æ ¼](https://ext.dcloud.net.cn/plugin?name=uni-grid)| |uni-group|[分组](https://ext.dcloud.net.cn/plugin?name=uni-group)| |uni-icons|[å›¾æ ‡](https://ext.dcloud.net.cn/plugin?name=uni-icons)| |uni-indexed-list|[索引列表](https://ext.dcloud.net.cn/plugin?name=uni-indexed-list)| |uni-link|[超链接](https://ext.dcloud.net.cn/plugin?name=uni-link)| |uni-list|[列表](https://ext.dcloud.net.cn/plugin?name=uni-list)| |uni-load-more|[åŠ è½½æ›´å¤š](https://ext.dcloud.net.cn/plugin?name=uni-load-more)| |uni-nav-bar|[自定义导航æ ](https://ext.dcloud.net.cn/plugin?name=uni-nav-bar)| |uni-notice-bar|[通告æ ](https://ext.dcloud.net.cn/plugin?name=uni-notice-bar)| |uni-number-box|[æ•°å—输入框](https://ext.dcloud.net.cn/plugin?name=uni-number-box)| |uni-pagination|[分页器](https://ext.dcloud.net.cn/plugin?name=uni-pagination)| |uni-popup|[弹出层](https://ext.dcloud.net.cn/plugin?name=uni-popup)| |uni-rate|[评分](https://ext.dcloud.net.cn/plugin?name=uni-rate)| |uni-row|[布局-行](https://ext.dcloud.net.cn/plugin?name=uni-row)| |uni-search-bar|[æœç´¢æ ](https://ext.dcloud.net.cn/plugin?name=uni-search-bar)| |uni-segmented-control|[分段器](https://ext.dcloud.net.cn/plugin?name=uni-segmented-control)| |uni-steps|[æ¥éª¤æ¡](https://ext.dcloud.net.cn/plugin?name=uni-steps)| |uni-swipe-action|[滑动æ“作](https://ext.dcloud.net.cn/plugin?name=uni-swipe-action)| |uni-swiper-dot|[è½®æ’图指示点](https://ext.dcloud.net.cn/plugin?name=uni-swiper-dot)| |uni-table|[è¡¨æ ¼](https://ext.dcloud.net.cn/plugin?name=uni-table)| |uni-tag|[æ ‡ç¾](https://ext.dcloud.net.cn/plugin?name=uni-tag)| |uni-title|[ç« èŠ‚æ ‡é¢˜](https://ext.dcloud.net.cn/plugin?name=uni-title)| |uni-transition|[过渡动画](https://ext.dcloud.net.cn/plugin?name=uni-transition)| 使用 `uni_modules` æ–¹å¼å®‰è£…组件库,å¯ä»¥ç›´æŽ¥é€šè¿‡æ’件市场导入,通过å³é”®èœå•快速更新组件,ä¸éœ€è¦å¼•ç”¨ã€æ³¨å†Œï¼Œç›´æŽ¥åœ¨é¡µé¢ä¸ä½¿ç”¨ `uni-ui` 组件。[点击安装 uni-ui 组件库](https://ext.dcloud.net.cn/plugin?id=55) **注æ„:下载最新的组件目å‰ä»…æ”¯æŒ uni_modules ,éž uni_modules 版本最高支æŒåˆ°ç»„ä»¶çš„1.2.10版本** 如ä¸èƒ½å‡çº§åˆ° `uni_modules` 版本,å¯ä»¥ä½¿ç”¨ `uni_modules` 安装好对应组件,将组件拷è´åˆ°å¯¹åº”目录。 例如需更新 `uni-list`å’Œ`uni-badge` ,å°† `uni_modules>uni-list>components`å’Œ`uni_modules>uni-badege>components`下所有目录拷è´åˆ°å¦‚下目录å³å¯ï¼š **目录示例** ```json ┌─components 组件目录 │ ├─uni-list list 列表目录 │ │ └─uni-list.vue list 组件文件 │ ├─uni-list-item list-item 列表目录 │ │ └─uni-list-item.vue list 组件文件 │ ├─uni-badge badge è§’æ ‡ç›®å½• │ │ └─uni-badge.vue badge 组件文件 │ └─ //.... 更多组件文件 ├─pages ä¸šåŠ¡é¡µé¢æ–‡ä»¶å˜æ”¾çš„目录 │ ├─index │ │ └─index.vue indexç¤ºä¾‹é¡µé¢ â”œâ”€main.js Vueåˆå§‹åŒ–入壿–‡ä»¶ ├─App.vue 应用é…置,用æ¥é…ç½®Appå…¨å±€æ ·å¼ä»¥åŠç›‘å¬ åº”ç”¨ç”Ÿå‘½å‘¨æœŸ ├─manifest.json é…置应用åç§°ã€appidã€logoã€ç‰ˆæœ¬ç‰æ‰“包信æ¯ï¼Œè¯¦è§ └─pages.json é…置页 ``` ### 通过 `uni_modules` 导入全部组件 如果想一次把所有uni-ui组件导入到项目ä¸ï¼Œåªéœ€è¦å¯¼å…¥ä¸€ä¸ª `uni-ui` 组件å³å¯ [点击去导入](https://ext.dcloud.net.cn/plugin?id=55)。 如果没有自动导入其他组件,å¯ä»¥åœ¨ uni-ui 组件目录上å³é”®é€‰æ‹© `安装三方æ’ä»¶ä¾èµ–` å³å¯ã€‚ ### npm安装 在 `vue-cli` 项目ä¸å¯ä»¥ä½¿ç”¨ `npm` 安装 `uni-ui` 库 ,或者直接在 `HBuilderX` 项目ä¸ä½¿ç”¨ `npm` 。 > **注æ„** > cli 项目默认是ä¸ç¼–译 `node_modules` 下的组件的,导致æ¡ä»¶ç¼–译ç‰åŠŸèƒ½å¤±æ•ˆ ,导致组件异常 > 需è¦åœ¨æ ¹ç›®å½•创建 `vue.config.js` 文件 ï¼Œå¢žåŠ `@dcloudio/uni-ui` 包的编译å³å¯æ£å¸¸ > ```javascript > // vue.config.js > module.exports = { > transpileDependencies:['@dcloudio/uni-ui'] > } > ``` **准备 sass** `vue-cli` 项目请先安装 sass åŠ sass-loader,如在 HBuliderX ä¸ä½¿ç”¨ï¼Œå¯è·³è¿‡æ¤æ¥ã€‚ - 安装 sass ``` npm i sass -D 或 yarn add sass -D ``` - 安装 sass-loader ``` npm i sass-loader@10.1.1 -D 或 yarn add sass-loader@10.1.1 -D ``` > 如果 `node` 版本å°äºŽ 16 ,sass-loader 请使用低于 @11.0.0 的版本,[sass-loader@11.0.0 䏿”¯æŒ vue@2.6.12 ](https://stackoverflow.com/questions/66082397/typeerror-this-getoptions-is-not-a-function) > 如果 `node` 版本大于 16 , `sass-loader` 建议使用 `v8.x` 版本 **安装 uni-ui** ``` npm i @dcloudio/uni-ui 或 yarn add @dcloudio/uni-ui ``` **é…ç½®easycom** 使用 `npm` 安装好 `uni-ui` 之åŽï¼Œéœ€è¦é…ç½® `easycom` 规则,让 `npm` å®‰è£…çš„ç»„ä»¶æ”¯æŒ `easycom` æ‰“å¼€é¡¹ç›®æ ¹ç›®å½•ä¸‹çš„ `pages.json` å¹¶æ·»åŠ `easycom` 节点: ```javascript // pages.json { "easycom": { "autoscan": true, "custom": { // uni-ui 规则如下é…ç½® "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue" } }, // 其他内容 pages:[ // ... ] } ``` 在 ``template`` ä¸ä½¿ç”¨ç»„件: ```html <uni-badge text="1"></uni-badge> <uni-badge text="2" type="success" @click="bindClick"></uni-badge> <uni-badge text="3" type="primary" :inverted="true"></uni-badge> ``` **注æ„** - uni-ui çŽ°åœ¨åªæŽ¨è使用 `easycom` ,如自己引用组件,å¯èƒ½ä¼šå‡ºçŽ°ç»„ä»¶æ‰¾ä¸åˆ°çš„问题 - 使用 npm 安装的组件,默认情况下 babel-loader 会忽略所有 node_modules ä¸çš„æ–‡ä»¶ ,导致æ¡ä»¶ç¼–译失效,需è¦é€šè¿‡é…ç½® `vue.config.js` 解决: ```javascript // åœ¨æ ¹ç›®å½•åˆ›å»º vue.config.js 文件,并é…置如下 module.exports = { transpileDependencies: ['@dcloudio/uni-ui'] } ``` - uni-ui 是uni-app内置组件的扩展。注æ„与webå¼€å‘ä¸åŒï¼Œuni-uiä¸åŒ…括基础组件,它是基础组件的补充。webå¼€å‘䏿œ‰çš„å¼€å‘è€…ä¹ æƒ¯ç”¨ä¸€ä¸ªuiåº“å®Œæˆæ‰€æœ‰å¼€å‘,但在uni-app体系ä¸ï¼ŒæŽ¨èå¼€å‘è€…é¦–å…ˆä½¿ç”¨æ€§èƒ½æ›´é«˜çš„åŸºç¡€ç»„ä»¶ï¼Œç„¶åŽæŒ‰éœ€å¼•入必è¦çš„æ‰©å±•组件。 - `uni-ui` 䏿”¯æŒä½¿ç”¨ `Vue.use()` 的方å¼å®‰è£… ### 贡献代ç 在使用 `uni-ui` ä¸ï¼Œå¦‚é‡åˆ°æ— 法解决的问题,请æ [Issues](https://github.com/dcloudio/uni-ui/issues) 给我们,å‡å¦‚æ‚¨æœ‰æ›´å¥½çš„ç‚¹åæˆ–更好的实现方å¼ï¼Œä¹Ÿæ¬¢è¿Žç»™æˆ‘们æäº¤ [PR](https://github.com/dcloudio/uni-ui/pulls)