diff --git a/build/rollup.config.app.js b/build/rollup.config.app.js index 98e8309aa3560076406088c3d87a6da242101755..aed98434dd5615bda2a7d2eb978c57384dfe1cfc 100644 --- a/build/rollup.config.app.js +++ b/build/rollup.config.app.js @@ -1,4 +1,5 @@ const path = require('path') +const json = require('@rollup/plugin-json') const alias = require('@rollup/plugin-alias') const replace = require('@rollup/plugin-replace') const nodeResolve = require('@rollup/plugin-node-resolve') @@ -88,7 +89,8 @@ module.exports = { find: 'uni-api-protocol', replacement: resolve('src/core/helpers/protocol') }] - }), + }), + json(), nodeResolve(), requireContext(), commonjs(), diff --git a/build/rollup.config.mp.js b/build/rollup.config.mp.js index 40eb0d92e359da22765b547fecc0580325f9f7f6..6d995df415cd9db61e30d0429332a36d483034ee 100644 --- a/build/rollup.config.mp.js +++ b/build/rollup.config.mp.js @@ -1,4 +1,5 @@ -const path = require('path') +const path = require('path') +const json = require('@rollup/plugin-json') const alias = require('@rollup/plugin-alias') const replace = require('@rollup/plugin-replace') @@ -71,7 +72,8 @@ module.exports = { find: 'uni-helpers', replacement: path.resolve(__dirname, '../src/core/helpers') }] - }), + }), + json(), replace({ __GLOBAL__: platform.prefix, __PLATFORM_TITLE__: platform.title, diff --git a/build/rollup.config.qa.js b/build/rollup.config.qa.js index a635919e7a211b8a999de1a3757e8b8d748f558d..3969d78a87a970db3a131544a260368860028be9 100644 --- a/build/rollup.config.qa.js +++ b/build/rollup.config.qa.js @@ -1,4 +1,5 @@ -const path = require('path') +const path = require('path') +const json = require('@rollup/plugin-json') const alias = require('@rollup/plugin-alias') const replace = require('@rollup/plugin-replace') const nodeResolve = require('@rollup/plugin-node-resolve') @@ -56,7 +57,8 @@ alias({ find: 'uni-api-protocol', replacement: resolve('src/core/helpers/protocol') }] -}), +}), +json(), nodeResolve(), requireContext(), commonjs(), diff --git a/build/rollup.config.service.js b/build/rollup.config.service.js index 1aeed8e29e3cb114bcbc33166d47b391f430bbf2..4499aceb3341f410f901bda4b1462aace841dd9d 100644 --- a/build/rollup.config.service.js +++ b/build/rollup.config.service.js @@ -1,4 +1,5 @@ -const path = require('path') +const path = require('path') +const json = require('@rollup/plugin-json') const alias = require('@rollup/plugin-alias') const replace = require('@rollup/plugin-replace') @@ -23,7 +24,8 @@ module.exports = { replacement: path.resolve(__dirname, '../src/core/helpers') } ] - }), + }), + json(), replace({ __GLOBAL__: 'getGlobalUni()', __PLATFORM_TITLE__: 'app-plus-nvue' diff --git a/build/webpack.config.js b/build/webpack.config.js index 2ca26492e4fe0839517512213f38420a306859d6..217cf83ee4bb3f8e40ffb607ed61b70aaeae7990 100644 --- a/build/webpack.config.js +++ b/build/webpack.config.js @@ -47,7 +47,7 @@ const provides = { } if (process.env.UNI_VIEW) { // 方便调试 delete provides.console -} +} if (process.env.UNI_VIEW === 'true') { alias.vue$ = resolve('packages/vue-cli-plugin-uni/packages/h5-vue/dist/vue.runtime.esm.js') @@ -66,7 +66,8 @@ module.exports = { plugins: [ new webpack.DefinePlugin({ __VERSION__: JSON.stringify(pkg.version), - __PLATFORM__: JSON.stringify(process.env.UNI_PLATFORM) + __PLATFORM__: JSON.stringify(process.env.UNI_PLATFORM), + __VIEW__: JSON.stringify(!!process.env.UNI_VIEW) }), new webpack.ProvidePlugin(provides) ] diff --git a/docs/README.md b/docs/README.md index e39e13d05523503bc3c88964cf496e3609623e15..9addb72df9de1938ce4aa416d27a1e8ff9554f58 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,7 +1,7 @@ ```uni-app``` 是一个使用 [Vue.js](https://vuejs.org/) 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。 -`DCloud`公司拥有600万开发者用户,几十万应用案例、12亿手机端月活用户,数千款uni-app插件、70+微信/qq群。阿里小程序工具官方内置uni-app([详见](https://docs.alipay.com/mini/ide/0.70-stable)),腾讯课堂官方为uni-app录制培训课程([详见](https://ask.dcloud.net.cn/article/35640)),开发者可以放心选择。 +`DCloud`公司拥有800万开发者用户,几十万应用案例、12亿手机端月活用户,数千款uni-app插件、70+微信/qq群。阿里小程序工具官方内置uni-app([详见](https://docs.alipay.com/mini/ide/0.70-stable)),腾讯课堂官方为uni-app录制培训课程([详见](https://ask.dcloud.net.cn/article/35640)),开发者可以放心选择。 `uni-app`在手,做啥都不愁。即使不跨端,```uni-app```也是更好的小程序开发框架([详见](https://ask.dcloud.net.cn/article/35947))、更好的App跨平台框架、更方便的H5开发框架。不管领导安排什么样的项目,你都可以快速交付,不需要转换开发思维、不需要更改开发习惯。 @@ -168,14 +168,14 @@ 从下面```uni-app```功能框架图可看出,```uni-app```在跨平台的过程中,不牺牲平台特色,可优雅的调用平台专有能力,真正做到海纳百川、各取所长。 -![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/doc/uni-app-frame-0310.png) +![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/87a0a0d0-60aa-11eb-8ff1-d5dcf8779628.png) ### 一套代码,运行到多个平台 ```uni-app```实现了一套代码,同时运行到多个平台;如下图所示,一套代码,同时运行到iOS模拟器、Android模拟器、H5、微信开发者工具、支付宝小程序Studio、百度开发者工具、字节跳动开发者工具、QQ开发者工具(底部8个终端选项卡代表8个终端模拟器): -![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/doc/dev1x8.jpg) +![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/efd8e280-60a9-11eb-a16f-5b3e54966275.jpg) 实际运行效果如下(点击图片可放大): -![](https://img.cdn.aliyun.dcloud.net.cn/uni-app/doc/run1x9.jpg) +![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/4869eb60-60aa-11eb-b680-7980c8a877b8.jpg) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index e3ea63d3236e27f67924aca4a70b567a73e7197c..125df333d2437846843c1ca5163d579bd413c555 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -22,6 +22,7 @@ * [性能优化建议](performance.md) * [宽屏适配指南](adapt.md) * [开放生态](ecosystem.md) +* [uni_modules插件规范](uni_modules.md) * [从其他项目转uni-app](translate.md) * [混合开发](hybrid.md) * [uni小程序sdk](https://nativesupport.dcloud.net.cn/README) @@ -32,7 +33,6 @@ * [广告变现](uni-ad.md) * [统一发行页面](m3w.md) * [案例](case.md) -* [开源项目资源汇总](casecode.md) * [选型评估指南](select.md) * [常见问题](faq.md) * 更新日志 @@ -80,7 +80,7 @@
官方QQ交流群
-
群21:717019120  点此加入
+
群11:296811328  点此加入
群35:713420817(2000人已满)
群34:530305531(2000人已满)
群33:498071674(2000人已满)
@@ -95,7 +95,7 @@
群24:672494800(2000人已满)
群23:599958679(2000人已满)
群22:687186952(2000人已满)
- +
群21:717019120(2000人已满)
群20:165796402(2000人已满)
群19:165657124(2000人已满)
群18:698592271(2000人已满)
@@ -105,7 +105,7 @@
群14:465953250(2000人已满)
群13:699478442(2000人已满)
群12:884860657(2000人已满)
-
群11:296811328(2000人已满)
+
群10:959059626(2000人已满)
群9:775128777(2000人已满)
群8:695442854(2000人已满)
diff --git a/docs/api/README.md b/docs/api/README.md index de047eb2d1123b29df233b8fa1ac882f97f28b91..aaf468fbc97499f7d2a46e36d0edbe727cd87d9e 100644 --- a/docs/api/README.md +++ b/docs/api/README.md @@ -336,7 +336,7 @@ async function request () { |[uni.showToast](api/ui/prompt?id=showtoast)|显示提示框| |[uni.showLoading](api/ui/prompt?id=showloading)|显示加载提示框| |[uni.hideToast](api/ui/prompt?id=hidetoast)|隐藏提示框| -|[uni.hideLoading](api/ui/prompt?id=hideloading)|隐藏提示框| +|[uni.hideLoading](api/ui/prompt?id=hideloading)|隐藏加载提示框| |[uni.showModal](api/ui/prompt?id=showmodal)|显示模态弹窗| |[uni.showActionSheet](api/ui/prompt?id=showactionsheet)|显示菜单列表| ##### 设置导航条 diff --git a/docs/api/_sidebar.md b/docs/api/_sidebar.md index 8b8494420db777e396af8293a91fc48d5245a833..ac3dada498bb11252b04d843b441e91647b43cd1 100644 --- a/docs/api/_sidebar.md +++ b/docs/api/_sidebar.md @@ -178,7 +178,7 @@
官方QQ交流群
-
群21:717019120  点此加入
+
群11:296811328  点此加入
群35:713420817(2000人已满)
群34:530305531(2000人已满)
群33:498071674(2000人已满)
@@ -193,7 +193,7 @@
群24:672494800(2000人已满)
群23:599958679(2000人已满)
群22:687186952(2000人已满)
- +
群21:717019120(2000人已满)
群20:165796402(2000人已满)
群19:165657124(2000人已满)
群18:698592271(2000人已满)
@@ -203,7 +203,7 @@
群14:465953250(2000人已满)
群13:699478442(2000人已满)
群12:884860657(2000人已满)
-
群11:296811328(2000人已满)
+
群10:959059626(2000人已满)
群9:775128777(2000人已满)
群8:695442854(2000人已满)
diff --git a/docs/api/other/choose-address.md b/docs/api/other/choose-address.md index cf64b52552ba0e1026712b9dc588d38577a9b89d..22379d5ba4b5fcbe51f3a9caeda27428d27c5339 100644 --- a/docs/api/other/choose-address.md +++ b/docs/api/other/choose-address.md @@ -24,7 +24,8 @@ | userName | string | 收货人姓名 || | postalCode | string | 邮编 || | provinceName | string | 国标收货地址第一级地址 || -| cityName | string | 国标收货地址第一级地址 || +| cityName | string | 国标收货地址第二级地址 || +| countyName | string | 国标收货地址第三级地址 || | detailInfo | string | 详细收货地址信息 || | nationalCode | string | 收货地址国家码 || | telNumber | string | 收货人手机号码 || diff --git a/docs/api/plugins/payment.md b/docs/api/plugins/payment.md index fb19344df30e5d61a26a9bdb2dc3bc04f38167ef..5d916b22099b6d654737d20248d0b7ced7fc7a5c 100644 --- a/docs/api/plugins/payment.md +++ b/docs/api/plugins/payment.md @@ -40,6 +40,7 @@ uni.requestPayment是一个统一各平台的客户端支付API,不管是在 #### 注意事项 +- APP端,如果你的应用在用户完成支付后;立即给支付的用户push消息通知。会与前端支付回调相互冲突,请延迟执行推送。 - 字节跳动小程序支付接口调整使用时请注意[发起头条支付](https://developer.toutiao.com/dev/cn/mini-app/develop/open-capacity/payment/pay) #### orderInfo 注意事项@orderInfo diff --git a/docs/api/router.md b/docs/api/router.md index da3b2a2628f092e431f5685f0cb782a3fe33aa48..fe77ae8517e6d96a0ea86ffd0217f063c4d1a4ae 100644 --- a/docs/api/router.md +++ b/docs/api/router.md @@ -6,7 +6,7 @@ |参数|类型|必填|默认值|说明|平台差异说明| |:-|:-|:-|:-|:-|:-| -|url|String|是||需要跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2',path为下一个页面的路径,下一个页面的onLoad函数可得到传递的参数|:-| +|url|String|是||需要跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2',path为下一个页面的路径,下一个页面的onLoad函数可得到传递的参数| | |animationType|String|否|pop-in|窗口显示的动画效果,详见:[窗口动画](api/router?id=animation)|App| |animationDuration|Number|否|300|窗口动画持续时间,单位为 ms|App| |events|Object|否||页面间通信接口,用于监听被打开页面发送到当前页面的数据。2.8.9+ 开始支持。|| @@ -15,9 +15,9 @@ |complete|Function|否||接口调用结束的回调函数(调用成功、失败都会执行)| | **object.success 回调函数** - + **参数** - + **Object res** |属性|类型|说明| @@ -45,39 +45,39 @@ export default { ``` // 2.8.9+ 支持 -uni.navigateTo({ - url: 'pages/test?id=1', - events: { - // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据 - acceptDataFromOpenedPage: function(data) { - console.log(data) - }, - someEvent: function(data) { - console.log(data) - } - ... - }, - success: function(res) { - // 通过eventChannel向被打开页面传送数据 - res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' }) - } +uni.navigateTo({ + url: 'pages/test?id=1', + events: { + // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据 + acceptDataFromOpenedPage: function(data) { + console.log(data) + }, + someEvent: function(data) { + console.log(data) + } + ... + }, + success: function(res) { + // 通过eventChannel向被打开页面传送数据 + res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' }) + } }) -// uni.navigateTo 目标页面 pages/test.vue -onLoad: function(option) { - console.log(option.query) - const eventChannel = this.getOpenerEventChannel() - eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'}); - eventChannel.emit('someEvent', {data: 'test'}); - // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据 - eventChannel.on('acceptDataFromOpenerPage', function(data) { - console.log(data) - }) +// uni.navigateTo 目标页面 pages/test.vue +onLoad: function(option) { + console.log(option.query) + const eventChannel = this.getOpenerEventChannel() + eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'}); + eventChannel.emit('someEvent', {data: 'test'}); + // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据 + eventChannel.on('acceptDataFromOpenerPage', function(data) { + console.log(data) + }) } ``` -url有长度限制,太长的字符串会传递失败,可使用[窗体通信](https://uniapp.dcloud.io/collocation/frame/communication)、[全局变量](https://ask.dcloud.net.cn/article/35021),或`encodeURIComponent`等多种方式解决,如下为`encodeURIComponent`示例。 +url有长度限制,太长的字符串会传递失败,可改用[窗体通信](https://uniapp.dcloud.io/collocation/frame/communication)、[全局变量](https://ask.dcloud.net.cn/article/35021),另外参数中出现空格等特殊字符时需要对参数进行编码,如下为使用`encodeURIComponent`对参数进行编码的示例。 ```html ``` @@ -235,56 +235,56 @@ uni.navigateBack({ #### EventChannel.emit(string eventName, any args) 触发一个事件 - -string eventName -事件名称 - -any args + +string eventName +事件名称 + +any args 事件参数 -#### EventChannel.off(string eventName, function fn) - -取消监听一个事件。给出第二个参数时,只取消给出的监听函数,否则取消所有监听函数 - -string eventName -事件名称 - -function fn -事件监听函数 - -参数 -any args +#### EventChannel.off(string eventName, function fn) + +取消监听一个事件。给出第二个参数时,只取消给出的监听函数,否则取消所有监听函数 + +string eventName +事件名称 + +function fn +事件监听函数 + +参数 +any args 触发事件参数 -#### EventChannel.on(string eventName, function fn) - -持续监听一个事件 - -string eventName -事件名称 - -function fn -事件监听函数 - -参数 -any args +#### EventChannel.on(string eventName, function fn) + +持续监听一个事件 + +string eventName +事件名称 + +function fn +事件监听函数 + +参数 +any args 触发事件参数 -#### EventChannel.once(string eventName, function fn) - -监听一个事件一次,触发后失效 - -string eventName -事件名称 - -function fn -事件监听函数 - -参数 -any args +#### EventChannel.once(string eventName, function fn) + +监听一个事件一次,触发后失效 + +string eventName +事件名称 + +function fn +事件监听函数 + +参数 +any args 触发事件参数 diff --git a/docs/api/system/nfc.md b/docs/api/system/nfc.md index 62fd7a9d5418ea0aefc1d50514baa674468bcd3e..ed41d408e561eaff6396772f7b0284d3df095175 100644 --- a/docs/api/system/nfc.md +++ b/docs/api/system/nfc.md @@ -4,4 +4,6 @@ - 微信小程序平台实现参考:[规范详情](https://developers.weixin.qq.com/miniprogram/dev/api/wx.startHCE.html) -- App 平台通过Native.js实现,**安卓:**[NFC数据读取](https://ask.dcloud.net.cn/question/6726) \ No newline at end of file +- App 平台: + 1. 通过Native.js实现,**安卓:**[NFC数据读取](https://ask.dcloud.net.cn/question/6726) + 2. 使用原生插件,详见[插件市场](https://ext.dcloud.net.cn/search?q=nfc) diff --git a/docs/api/ui/scroll.md b/docs/api/ui/scroll.md index dd837dcc8a510edfc5fc9dac84c3c6d53f84d76d..ba1152284307464dae158a17c1807701fbe3d1bb 100644 --- a/docs/api/ui/scroll.md +++ b/docs/api/ui/scroll.md @@ -6,7 +6,7 @@ |参数名 |类型 |必填 |说明 | |:- |:- |:- |:- | -|scrollTop|String |是 |滚动到页面的目标位置(单位px) | +|scrollTop|String |否 |滚动到页面的目标位置(单位px) | |selector |String |否 |选择器,微信小程序2.7.3+ 、支付宝小程序1.20.0+支持 | |duration |Number |否 |滚动动画的时长,默认300ms,单位 ms | |success |function |否 |接口调用成功的回调函数 | diff --git a/docs/case.md b/docs/case.md index 986e553ef5b16745eef272c94aab710666b39e25..44e432f35645b56ecc60c989fe0f99808cca81c7 100644 --- a/docs/case.md +++ b/docs/case.md @@ -1,4 +1,4 @@ -DCloud有**600万**开发者,[uni统计](https://tongji.dcloud.net.cn/)手机端月活**10亿**。是开发者数量和案例最丰富的多端开发框架。 +DCloud有**800万**开发者,[uni统计](https://tongji.dcloud.net.cn/)手机端月活**12亿**。是开发者数量和案例最丰富的多端开发框架。 欢迎知名开发商[提交案例](https://github.com/dcloudio/uni-app/issues/6)或接入[uni统计](https://tongji.dcloud.net.cn/)。 diff --git a/docs/collocation/App.md b/docs/collocation/App.md index f79edf548a23a69e2ede4696e366851f01a2bc2d..a926168a8ecbc51689934f2bd81b34d013aa8114 100644 --- a/docs/collocation/App.md +++ b/docs/collocation/App.md @@ -55,7 +55,7 @@ nvue的weex编译模式中使用globalData的话,由于weex生命周期不支 globalData是简单的全局变量,如果使用状态管理,请使用`vuex`(main.js中定义) ### 全局样式 -在`App.vue`中,可以一些定义全局通用样式,例如需要加一个通用的背景色,首屏页面渲染的动画等都可以写在App.vue中。 +在`App.vue`中,可以定义一些全局通用样式,例如需要加一个通用的背景色,首屏页面渲染的动画等都可以写在App.vue中。 注意如果工程下同时有vue和nvue文件,全局样式的所有css会应用于所有文件,而nvue支持的css有限,编译器会在控制台报警,提示某些css无法在nvue中支持。此时需要把nvue不支持的css写在单独的条件编译里。如: ```html diff --git a/docs/collocation/_sidebar.md b/docs/collocation/_sidebar.md index a20fa6271102c28979699c3ada4b9eee254df825..46652edf7d4892657a2ee50fd3d4cb85528f89a1 100644 --- a/docs/collocation/_sidebar.md +++ b/docs/collocation/_sidebar.md @@ -53,7 +53,7 @@
官方QQ交流群
-
群21:717019120  点此加入
+
群11:296811328  点此加入
群35:713420817(2000人已满)
群34:530305531(2000人已满)
群33:498071674(2000人已满)
@@ -68,7 +68,7 @@
群24:672494800(2000人已满)
群23:599958679(2000人已满)
群22:687186952(2000人已满)
- +
群21:717019120(2000人已满)
群20:165796402(2000人已满)
群19:165657124(2000人已满)
群18:698592271(2000人已满)
@@ -78,7 +78,7 @@
群14:465953250(2000人已满)
群13:699478442(2000人已满)
群12:884860657(2000人已满)
-
群11:296811328(2000人已满)
+
群10:959059626(2000人已满)
群9:775128777(2000人已满)
群8:695442854(2000人已满)
diff --git a/docs/collocation/auto/quick-start.md b/docs/collocation/auto/quick-start.md index 8d4223c01112ef8dd5fc385c46f19b7224ad36d4..a5f852186e2852df7264cba97fa4936e4408e4fd 100644 --- a/docs/collocation/auto/quick-start.md +++ b/docs/collocation/auto/quick-start.md @@ -337,7 +337,7 @@ await page.waitFor(7000) page = await program.currentPage() ``` -2. 微信小程序 element 不能跨组件选择元素,首先要先获取当前组件,在继续查找 +2. 微信小程序 element 不能跨组件选择元素,首先要先获取当前组件,再继续查找 ```html @@ -356,6 +356,6 @@ await tag.$('.test') 3. 微信小程序暂不支持父子选择器 4. 百度小程序选择元素必须有事件的元素才能被选中,否则提示元素不存在 -5. 分包中的页面,打开之后要延迟时间长一点,否者不能正确获取到页面信息 +5. 分包中的页面,打开之后要延迟时间长一点,否则不能正确获取到页面信息 diff --git a/docs/component/_sidebar.md b/docs/component/_sidebar.md index 7d2c2cb745a3e45355d287eabf2df951d5f084ce..ef97c626bb0c8a6682654fa9d34a13cbb5bd3a57 100644 --- a/docs/component/_sidebar.md +++ b/docs/component/_sidebar.md @@ -131,7 +131,7 @@
官方QQ交流群
-
群21:717019120  点此加入
+
群11:296811328  点此加入
群35:713420817(2000人已满)
群34:530305531(2000人已满)
群33:498071674(2000人已满)
@@ -146,7 +146,7 @@
群24:672494800(2000人已满)
群23:599958679(2000人已满)
群22:687186952(2000人已满)
- +
群21:717019120(2000人已满)
群20:165796402(2000人已满)
群19:165657124(2000人已满)
群18:698592271(2000人已满)
@@ -156,7 +156,7 @@
群14:465953250(2000人已满)
群13:699478442(2000人已满)
群12:884860657(2000人已满)
-
群11:296811328(2000人已满)
+
群10:959059626(2000人已满)
群9:775128777(2000人已满)
群8:695442854(2000人已满)
diff --git a/docs/component/ad-draw.md b/docs/component/ad-draw.md index 0967002b52630afeea647dd6330136c654fbf64f..10aee25d81e97e52bba51b8d0eac55608b46d7ad 100644 --- a/docs/component/ad-draw.md +++ b/docs/component/ad-draw.md @@ -101,7 +101,7 @@ - + @@ -115,6 +115,7 @@ } }, onReady: function (e) { + this.getAdData() }, methods: { getAdData: function (e) { diff --git a/docs/component/ad-rewarded-video.md b/docs/component/ad-rewarded-video.md index e39daf2b5f92b318f6e5ae3891bf445471f17708..0c487b805f5a3b3ecc2985c4eddc1ddf46cf1510 100644 --- a/docs/component/ad-rewarded-video.md +++ b/docs/component/ad-rewarded-video.md @@ -1,3 +1,3 @@ ### 激励视频广告 -文档地址已迁移至:[https://uniapp.dcloud.io/api/ad/rewarded-video-ad/](https://uniapp.dcloud.io/api/ad/rewarded-video-ad) \ No newline at end of file +文档地址已迁移至:[https://uniapp.dcloud.io/api/ad/rewarded-video](https://uniapp.dcloud.io/api/ad/rewarded-video) \ No newline at end of file diff --git a/docs/component/ad.md b/docs/component/ad.md index f7d74f50f6e00b3498d6c3fe1e92bb352c0954fa..da055316553cae8e3f369cdfb3b9d0960f124ee7 100644 --- a/docs/component/ad.md +++ b/docs/component/ad.md @@ -192,6 +192,7 @@ export default { width: 300 // 根据宽度获取合适的广告(单位px) }, (res) => { + // 注意: 广告数据只能使用一次 this.adData = res.ads[0]; console.log(this.adData); }, diff --git a/docs/component/datacom.md b/docs/component/datacom.md index 0b8d44d2d514f23f17cf9b6276d3c5c986b601dc..296bc52b678b3e4735405e8b271c8d2865d24084 100644 --- a/docs/component/datacom.md +++ b/docs/component/datacom.md @@ -350,3 +350,469 @@ datacom组件规范还要求支持绑定 value,且支持双向绑定,即: |tree(树状控件) |单选、多选 |树 |平铺 |展示 | | 欢迎开发者们开发这些`datacom组件`,后续插件市场将单列出datacom组件,给予更高的显示权重。 + + +### 使用mixinDatacom快速开发datacom@mixindatacom + +> 版本要求:HBuilderX 3.1.0+ + +开发一个支持localdata的datacom组件相对容易,但要开发支持云端数据的datacom组件,实现对collection、field、where等属性的解析,工作量还是不小的。 + +为此官方提供了一个mixin混入库,开发者在自己的datacom组件中混入`uniCloud.mixinDatacom`,即可方便的让自己的组件支持本地和云端的数据绑定,快速完成datacom组件。 + +mixin是vue的技术,不熟悉的可以点此了解[vue官网的mixin文档](https://cn.vuejs.org/v2/api/#Vue-mixin) + +#### 语法手册 + +`uniCloud.mixinDatacom` 的props + +与标准的datacom组件相同,除了localdata外,其他都是`uniCloud-db组件`的标准属性。 + +|属性名 | 类型 | 默认值 | 说明| +|:-: | :-: | :-: | :-: | +|localdata |Array | |本地数据,[详情](https://uniapp.dcloud.net.cn/component/datacom)| +|collection |String | |表名。支持输入多个表名,用 `,` 分割| +|field |String | |查询字段,多个字段用 `,` 分割| +|where |String | |查询条件,内容较多,另见jql文档:[详情](https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=jsquery)| +|orderby |String | |排序字段及正序倒叙设置| +|groupby |String | |对数据进行分组| +|group-field |String | |对数据进行分组统计| +|distinct |Boolean | false |是否对数据查询结果中重复的记录进行去重| +|action |string | |云端执行数据库查询的前或后,触发某个action函数操作,进行预处理或后处理,[详情](https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=%e4%ba%91%e7%ab%af%e9%83%a8%e5%88%86)。场景:前端无权操作的数据,比如阅读数+1| +|page-data |String | add |分页策略选择。值为 `add` 代表下一页的数据追加到之前的数据中,常用于滚动到底加载下一页;值为 `replace` 时则替换当前data数据,常用于PC式交互,列表底部有页码分页按钮| +|page-current |Number | 0 |当前页| +|page-size |Number | 10 |每页数据数量| +|getcount |Boolean | false |是否查询总数据条数,默认 `false`,需要分页模式时指定为 `true`| +|getone |Boolean | false |指定查询结果是否仅返回数组第一条数据,默认 false。在false情况下返回的是数组,即便只有一条结果,也需要[0]的方式获取。在值为 true 时,直接返回结果数据,少一层数组。一般用于非列表页,比如详情页| +|gettree |Boolean | false |是否查询树状数据,默认 `false`| +|startwith |String | '' |`gettree`的第一层级条件,此初始条件可以省略,不传startWith时默认从最顶级开始查询| +|limitlevel |Number | 10 |`gettree`查询返回的树的最大层级。超过设定层级的节点不会返回。默认10级,最大15,最小1| + + +`uniCloud.mixinDatacom` 的data + +|属性名 | 类型 | 默认值 | 说明| +|:-: | :-: | :-: | :-: | +|mixinDatacomLoading |Boolean | false |加载数据状态| +|mixinDatacomHasMore |Boolean | false |是否有更多数据| +|mixinDatacomResData |Array | [] |查询返回的数据| +|mixinDatacomErrorMessage |String | |错误消息| +|mixinDatacomPage |OBject | |分页信息| + + +`uniCloud.mixinDatacom` methods + +|方法名 | 说明| +|:-: | :-: | +|mixinDatacomGet |加载数据| +|mixinDatacomEasyGet |加载数据,包含 `mixinDatacomLoading` 、`mixinDatacomHasMore`、`mixinDatacomErrorMessage` 逻辑 | +|onMixinDatacomPropsChange |属性发生变化时触发| + +#### 使用方法 + +使用 `uniCloud.mixinDatacom` 开发 `datacom` 组件需要以下步骤 + +1. 在export default下声明`mixin: [uniCloud.mixinDatacom]` +2. 在template中定义三个标签,绑定 `uniCloud.mixinDatacom` 的 `data` 状态,加载中`mixinDatacomLoading` 、加载出错提示 `mixinDatacomErrorMessage`、处理数据及相关UI展现 `mixinDatacomResData` +3. 组件的created声明周期中调用 `uniCloud.mixinDatacom` 中的 `mixinDatacomGet()` 或 `mixinDatacomEasyGet()` 方法请求云端数据库。这两种方法的区别如下: + - `mixinDatacomGet()` 仅请求数据,自行处理各种状态和异常。 + - `mixinDatacomEasyGet()` 在 `mixinDatacomGet()` 的基础之上封装了加载状态、分页及错误消息,可通过模板绑定。用起来更简单 + + +使用 `uniCloud.mixinDatacom` 开发 `datacom` 组件的优势 + +- 不需要定义 `datacom` 组件的属性 +- 不需要关心 `uniClinetDB` API +- 不需要判断哪些属性变化时需要重置已加载数据, 仅判断 `onMixinDatacomPropsChange(needReset, changed) {}` 参数 `needReset` 是否为 `true` 即可 +- 当 `uniClinetDB` 有新增属性时,组件代码也不需要跟随更新 + + +例如要开发一个datacom组件,名为uni-data-jql: + +- 方法1,使用 `mixinDatacomEasyGet()` + +```html + + + + +``` + + +- 方法2,使用 `mixinDatacomGet()` + +需要多写些代码处理各种状态。如果`mixinDatacomEasyGet`的封装无法灵活满足你的需求,可以使用这种方式。 + +```html + + + + +``` + + +做好这个uni-data-jql组件后,就可以在页面中使用了: + +```html + + + +``` + + +#### `uniCloud.mixinDatacom` 源码 @mixinDatacomsource +为方便开发者理解mixinDatacom的工作原理,这里贴出mixinDatacom的源码: + +```js +export default { + props: { + localdata: { + type: Array, + default () { + return [] + } + }, + options: { + type: [Object, Array], + default () { + return {} + } + }, + collection: { + type: String, + default: '' + }, + action: { + type: String, + default: '' + }, + field: { + type: String, + default: '' + }, + orderby: { + type: String, + default: '' + }, + where: { + type: [String, Object], + default: '' + }, + pageData: { + type: String, + default: 'add' + }, + pageCurrent: { + type: Number, + default: 1 + }, + pageSize: { + type: Number, + default: 20 + }, + getcount: { + type: [Boolean, String], + default: false + }, + gettree: { + type: [Boolean, String], + default: false + }, + gettreepath: { + type: [Boolean, String], + default: false + }, + startwith: { + type: String, + default: '' + }, + limitlevel: { + type: Number, + default: 10 + }, + groupby: { + type: String, + default: '' + }, + groupField: { + type: String, + default: '' + }, + distinct: { + type: [Boolean, String], + default: false + }, + manual: { + type: Boolean, + default: false + } + }, + data() { + return { + mixinDatacomLoading: false, // 网络请求状态 + mixinDatacomHasMore: false, // 是否有更多数据 + mixinDatacomResData: [], // 请求返回的数据,调用 loadData 后会更新 + mixinDatacomErrorMessage: '', // 请求出错时的错误消息 + mixinDatacomPage: {} // 分页信息,详情见 created 生命周期 + } + }, + created() { + this.mixinDatacomPage = { + current: this.pageCurrent, // 当前页面,初始化设置 props中的 pageCurrent + size: this.pageSize, // 页面大小,初始化设置 props中的 pageSize + count: 0, // 数据总数,getcount=true时有效 + } + this.$watch(() => { + var al = []; + ['pageCurrent', + 'pageSize', + 'localdata', + 'collection', + 'action', + 'field', + 'orderby', + 'where', + 'getont', + 'getcount', + 'gettree' + ].forEach(key => { + al.push(this[key]) + }) + return al + }, (newValue, oldValue) => { + let needReset = false + let changed = [] + for (let i = 2; i < newValue.length; i++) { + if (newValue[i] !== oldValue[i]) { + needReset = true + changed.push(newValue[i]) + } + } + if (newValue[0] !== oldValue[0]) { + this.mixinDatacomPage.current = this.pageCurrent + } + this.mixinDatacomPage.size = this.pageSize + + this.onMixinDatacomPropsChange(needReset, changed) + }) + }, + methods: { + // props发生变化时被调用,在组件中覆盖此方法 + // 非 pageCurrent,pageSize 改变时 needReset=true,需要重置数据 + // changed,发生变化的属性名,类型为Array,例如 ['collection', 'action'] + onMixinDatacomPropsChange(needReset, changed) {}, + // 加载数据 + mixinDatacomEasyGet({ + getone = false, + success, + fail + } = {}) { + if (this.mixinDatacomLoading) { + return + } + this.mixinDatacomLoading = true + + this.mixinDatacomErrorMessage = '' + + this.mixinDatacomGet().then((res) => { + this.mixinDatacomLoading = false + const { + data, + count + } = res.result + if (this.getcount) { + this.mixinDatacomPage.count = count + } + this.mixinDatacomHasMore = data.length < this.pageSize + const responseData = getone ? (data.length ? data[0] : undefined) : data + this.mixinDatacomResData = responseData + + if (success) { + success(responseData) + } + }).catch((err) => { + this.mixinDatacomLoading = false + this.mixinDatacomErrorMessage = err + fail && fail(err) + }) + }, + // 调用 uniClientDB 查询数据 + mixinDatacomGet(options = {}) { + let db = uniCloud.database() + + const action = options.action || this.action + if (action) { + db = db.action(action) + } + + const collection = options.collection || this.collection + db = db.collection(collection) + + const where = options.where || this.where + if (!(!where || !Object.keys(where).length)) { + db = db.where(where) + } + + const field = options.field || this.field + if (field) { + db = db.field(field) + } + + const groupby = options.groupby || this.groupby + if (groupby) { + db = db.groupBy(groupby) + } + + const groupField = options.groupField || this.groupField + if (groupField) { + db = db.groupField(groupField) + } + + const distinct = options.distinct !== undefined ? options.distinct : this.distinct + if (distinct === true) { + db = db.distinct() + } + + const orderby = options.orderby || this.orderby + if (orderby) { + db = db.orderBy(orderby) + } + + const current = options.pageCurrent !== undefined ? options.pageCurrent : this.mixinDatacomPage.current + const size = options.pageSize !== undefined ? options.pageSize : this.mixinDatacomPage.size + const getCount = options.getcount !== undefined ? options.getcount : this.getcount + const gettree = options.gettree !== undefined ? options.gettree : this.gettree + const gettreepath = options.gettreepath !== undefined ? options.gettreepath : this.gettreepath + const limitLevel = options.limitlevel !== undefined ? options.limitlevel : this.limitlevel + const startWith = options.startwith !== undefined ? options.startwith : this.startwith + + const getOptions = { + getCount + } + const treeOptions = { + limitLevel, + startWith + } + if (gettree) { + getOptions.getTree = treeOptions + } + if (gettreepath) { + getOptions.getTreePath = treeOptions + } + + db = db.skip(size * (current - 1)).limit(size).get(getOptions) + + return db + } + } +} +``` diff --git a/docs/component/input.md b/docs/component/input.md index be077ef4fbcdde97ccf54e852316e641ac81e881..cac6e49b17bff203f948f92128cd8ad2b40cd056 100644 --- a/docs/component/input.md +++ b/docs/component/input.md @@ -15,7 +15,7 @@ |disabled|Boolean|false|是否禁用|| |maxlength|Number|140|最大输入长度,设置为 -1 的时候不限制最大长度|| |cursor-spacing|Number|0|指定光标与键盘的距离,单位 px 。取 input 距离底部的距离和 cursor-spacing 指定的距离的最小值作为光标与键盘的距离|App、微信小程序、百度小程序、QQ小程序| -|focus|Boolean|false|获取焦点。|在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。| +|focus|Boolean|false|获取焦点。|在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点| |confirm-type|String|done|设置键盘右下角按钮的文字,仅在 type="text" 时生效。|微信小程序、App、H5| |confirm-hold|Boolean|false|点击键盘右下角按钮时是否保持键盘不收起|App、微信小程序、支付宝小程序、百度小程序、QQ小程序| |cursor|Number||指定focus时的光标位置|| diff --git a/docs/component/list.md b/docs/component/list.md index f4c827494b1b721ea16335634bf8f972022493c9..8d873247ab7cc98c8fcb167323ecb19132a6d8cb 100644 --- a/docs/component/list.md +++ b/docs/component/list.md @@ -76,7 +76,8 @@ headerHeight|吸顶距离|Number|是|子list吸顶距离最外层滚动容器顶 如果列表滚动到底部将会立即触发这个事件,你可以在这个事件的处理函数中加载下一页的列表项。 如果未触发,请检查是否设置了loadmoreoffset的值,建议此值设置大于0 - 如何重置 loadmore -``` + +```html