提交 f80f905e 编写于 作者: 辛宝Otto's avatar 辛宝Otto 🥊

Merge branch 'master' into 'DWA_05-master-patch-01134'

# Conflicts:
#   docs/component/uniui/uni-forms.md
......@@ -3,3 +3,6 @@ docs/.vuepress/dist
.DS_Store
**/sitemap.xml
docs-lite
dist
docs/.vuepress/.cache
docs/.vuepress/.temp
\ No newline at end of file
......@@ -7,7 +7,7 @@
1. 右侧导航仅支持二级、三级、四级
2. 文档如有标题,必须从一级或二级开始,不允许只有三级,没有二级的情况;也不允许先有三级、后有二级的情况;
3. FAQ、注意事项、常见问题,要放在文档最下方,不要穿插在文档中间位置
4. 容器书写方式,支持:`tip``warning``danger``details(在 IE / Edge 中不生效)` [详情](https://vuepress.vuejs.org/zh/guide/markdown.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AE%B9%E5%99%A8)
4. 容器书写方式,支持:`info``tip``warning``danger``details(在 IE / Edge 中不生效)` [详情](https://vuepress.vuejs.org/zh/guide/markdown.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AE%B9%E5%99%A8)
```md
::: warning 注意
- 认证凭证有效期为`30分钟`
......@@ -51,12 +51,12 @@
```html
<img class="zooming" src="xxx">
```
11. md 支持书写属性。`#{`:左定界符,与 markdown 语法之间不能有空格;`}` 右定界符
11. md 支持书写属性。`#{`:左定界符,与 markdown 语法之间不能有空格;`}` 右定界符 [详情](https://www.npmjs.com/package/markdown-it-attrs#ambiguity)
```md
![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app-multiport.jpg)#{.zooming data=abc width=100 height=100}
```
渲染为:
```html
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app-multiport.jpg" class="zooming" data="abc" width="100" height="100" />
```
......
const path = require('path');
const { slugify } = require('@vuepress/shared-utils')
const highlight = require('@vuepress/markdown/lib/highlight')
const translatePlugin = require('./markdown/translate')
const headerPlugin = require('./markdown/header')
const createSidebar = require('./markdown/createSidebar')
......@@ -23,7 +24,7 @@ const config = {
['meta', {
name: 'keywords', content: 'serverless,云开发,数字天堂,前端开发,web开发,小程序开发,跨平台,跨平台开发,跨端开发,混合开发,app开发,多端开发,开发工具,HTML5,vue,react,native,rn,flutter,weex,cordova,微信小程序,阿里小程序,支付宝小程序,百度小程序,头条小程序,抖音小程序,QQ小程序,快应用,流应用,云函数'
}],
['script', { src: `/js/redirect.js?${Date.now()}&v=${Date.now()}&version=${Date.now()}` }],
['script', { src: `/js/redirect.js` }],
['script', { src: 'https://hm.baidu.com/hm.js?fe3b7a223fc08c795f0f4b6350703e6f' }],
['script', { src: '/miku-delivery-1.2.1.js' }],
['script', { src: `/js/miku.js?${Date.now()}&v=${Date.now()}&version=${Date.now()}` }]
......@@ -48,6 +49,7 @@ const config = {
editLinkText: '帮助我们改善此页面!',
lastUpdated: '上次更新',
// smoothScroll: true,
search: false,
algolia: {
apiKey: '2fdcc4e76c8e260671ad70065e60b2e7',
indexName: 'zh-uniapp',
......@@ -72,6 +74,14 @@ const config = {
},
extractHeaders: ['h1', 'h2', 'h3', 'h4'],
chainMarkdown (config) {
const extensionMap = {
uts: 'ts'
}
config.options.highlight((str, lang) => {
const extension = extensionMap[lang]
return highlight(str, extension || lang)
})
config
.plugin('translate')
.use(translatePlugin)
......@@ -107,18 +117,39 @@ const config = {
path.resolve(process.cwd(), 'docs/.vuepress/config')
)
},
patterns: ['**/!(_sidebar).md', '**/*.vue'],
plugins: [
["vuepress-plugin-juejin-style-copy", copyOptions]
["vuepress-plugin-juejin-style-copy", copyOptions],
[
'named-chunks',
{
layoutChunkName: (layout) => 'layout-' + layout.componentName,
pageChunkName: page => {
const _context = page._context
const pageHeaders = (page.headers || []).map(item => item.title).join(',')
if (pageHeaders) {
const originDescription = page.frontmatter.description || ''
page.frontmatter = {
...page.frontmatter,
description: `${_context.siteConfig.description ? `${_context.siteConfig.description},` : ''}${pageHeaders}${originDescription ? `,${originDescription}` : ''}`.slice(0, 150),
}
}
const pagePath = page.path.indexOf('.html') === -1 ? page.path + 'index' : page.path
const curPath = 'docs/' + pagePath.replace('docs/', '').substring(1).replace(/\.html/g, "")
return curPath
}
}
]
],
/**
*
*
* @param {string} path path: js 资源文件路径
* @param {string} type type: 资源文件类型,取值有 script 等
* @returns
* @returns
*/
shouldPrefetch: (path, type) => {
if (type === 'script' && path.indexOf('/docs/') > -1) return false
return true
if (type === 'script') return path.includes('vendors~') || path.includes('layout-') || path.includes('index.')
return false
}
}
......
......@@ -37,16 +37,6 @@ export const navbar = [
type: 'link',
link: '/api/'
},
{
text: 'UTS',
type: 'link',
link: '/uts/'
},
{
text: 'uni-app x',
type: 'link',
link: '/uni-app-x/'
},
{
text: '插件',
type: 'link',
......@@ -57,6 +47,11 @@ export const navbar = [
type: 'link',
link: '/worktile/'
},
{
text: 'UTS',
type: 'link',
link: 'https://doc.dcloud.net.cn/uni-app-x/uts/'
},
{
text: '其他规范',
type: 'links',
......@@ -137,10 +132,19 @@ export const navbar = [
}
]
},
{
text: 'uni-app x',
link: 'https://doc.dcloud.net.cn/uni-app-x/',
type: "link",
target: '_blank',
needOutbound: false
},
{
text: 'uniCloud',
type: 'link',
link: '/uniCloud/'
link: 'https://doc.dcloud.net.cn/uniCloud/',
type: "link",
target: '_blank',
needOutbound: false
},
{
text: 'HBuilder',
......
......@@ -91,7 +91,18 @@ const routerMap = {
'/nvue-event': '/tutorial/nvue-event.html',
'/use-html5plus': '/tutorial/use-html5plus.html',
'/m3w': '/uniCloud/uni-portal.html',
'/tutorial/syntax-uts': '/uts/',
'/tutorial/syntax-uts': '/uni-app-x/uts/',
'/uniCloud/uni-id-summary': '/uniCloud/uni-id/summary.html',
'/uniCloud/uni-id-pages': '/uniCloud/uni-id/redirect.html',
'/uniCloud/uni-id-common': '/uniCloud/uni-id/cloud-common.html',
'/uniCloud/uni-id': '/uniCloud/uni-id/old.html',
'/uts/': '/uni-app-x/uts/',
'/uni-app-x/ext': '/uni-app-x/api/ext.html',
'/uni-app-x/pagesjson': '/uni-app-x/collocation/pagesjson.html',
'/uni-app-x/manifest': '/uni-app-x/collocation/manifest.html',
'/uniCloud/': 'https://doc.dcloud.net.cn/uniCloud/',
'/uni-app-x/': 'https://doc.dcloud.net.cn/uni-app-x/'
}
export default ({ fullPath, path, hash }) => {
......@@ -104,7 +115,7 @@ export default ({ fullPath, path, hash }) => {
}
}
const matchPath = routerMap[path]
const matchPath = routerMap[path] || routerMap[path.replace('.html', '')]
if (matchPath) {
return {
path: matchPath,
......@@ -120,4 +131,17 @@ export default ({ fullPath, path, hash }) => {
replace: true
}
}
const routerMapKeys = Object.keys(routerMap)
let returnPathConfig = null
routerMapKeys.forEach(key => {
if (path.indexOf(key) === 0 && routerMap[key].indexOf(key) !== 0 && routerMap[key] !== path) {
return returnPathConfig = {
path: path.replace(key, routerMap[key]),
hash,
replace: true
}
}
})
if (returnPathConfig) return returnPathConfig
}
\ No newline at end of file
......@@ -4,10 +4,14 @@ export default {
text: 'uni-app',
type: 'algolia',
},
/* {
text: 'uni-app x',
type: 'algolia',
},
{
text: 'uniCloud',
type: 'algolia',
},
}, */
{
text: '问答社区',
tag: 'ask',
......
......@@ -3,6 +3,7 @@ import uniCloud from './uniCloud';
export default {
"/": uniapp,
'/uniCloud/': uniCloud,
// "/uni-app-x/": uniapp,
// '/uniCloud/': uniCloud,
weChatOfficialAccountImg: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/weixin.jpg'
}
......@@ -150,11 +150,6 @@ export default {
"state": 1,
"prefix": "群23"
},
{
"number": "672494800",
"state": 1,
"prefix": "群24"
},
{
"number": "165297000",
"state": 1,
......@@ -170,6 +165,11 @@ export default {
"state": 1,
"prefix": "群27"
},
{
"number": "166188776",
"state": 1,
"prefix": "群28"
},
{
"number": "202965481",
"state": 1,
......@@ -206,10 +206,10 @@ export default {
"prefix": "群35"
},
{
"number": "166188776",
"number": "672494800",
"state": 0,
"prefix": "群28",
joinQQGroupHref: 'https://qm.qq.com/cgi-bin/qm/qr?k=fAMAW_nDwpQ1tcST2iOjbFkmfzO-Ag1L&jump_from=webapi&authKey=wq4iIqmCL2fHoBmAchRcFlbivrmF1/c7n48+2qfiTU02Ow/6JWjHdus9sLGu85Bd'
"prefix": "群24",
joinQQGroupHref: 'https://qm.qq.com/cgi-bin/qm/qr?k=faAcqKSDUlw3E0KI6ylGWcCKUNa6sMQq&jump_from=webapi&authKey=9c9E8o35sWKtdv2rBkl4Y5G/z6+SwILWZ5oSlm9Tl0MMk9l82XYtKMViLXMA4/QD'
}
]
}
......@@ -9,6 +9,7 @@ const xmlAfter = `\n</urlset>`
module.exports = (links, callback = () => { }) => {
const xmlItems = links.map(url => {
if (!url.endsWith('/') && !url.endsWith('html')) url += '.html'
return ` <url>
<loc>${domain + url}</loc>
</url>`
......
......@@ -4,6 +4,11 @@ let utsApiJson = {};
let utsComJson = {};
let utsUnicloudApiJson = {};
let customTypeJson = {};
let vueJson = {};
let manifestJson = {};
let pagesJson = {};
let specialStringJson = {};
let pageInstanceJson = {};
try {
cssJson = require('../utils/cssJson.json');
} catch (error) {}
......@@ -22,6 +27,21 @@ try {
try {
customTypeJson = require('../utils/customTypeJson.json');
} catch (error) {}
try {
vueJson = require('../utils/vueJson.json');
} catch (error) {}
try {
manifestJson = require('../utils/manifestJson.json');
} catch (error) {}
try {
pagesJson = require('../utils/pagesJson.json');
} catch (error) {}
try {
specialStringJson = require('../utils/specialStringJson.json');
} catch (error) {}
try {
pageInstanceJson = require('../utils/pageInstanceJson.json');
} catch (error) {}
function getRegExp(key) {
......@@ -36,7 +56,7 @@ const getJSON = text => {
json: cssJson,
};
}
match = text.match(getRegExp('UTSJSON'));
if (match) {
return {
......@@ -44,7 +64,7 @@ const getJSON = text => {
json: utsJson,
};
}
match = text.match(getRegExp('UTSAPIJSON'));
if (match) {
return {
......@@ -77,6 +97,46 @@ const getJSON = text => {
};
}
match = text.match(getRegExp('VUEJSON'));
if (match) {
return {
match,
json: vueJson,
};
}
match = text.match(getRegExp('MANIFESTJSON'));
if (match) {
return {
match,
json: manifestJson,
};
}
match = text.match(getRegExp('PAGESJSON'));
if (match) {
return {
match,
json: pagesJson,
};
}
match = text.match(getRegExp('SPECIALSTRINGJSON'));
if (match) {
return {
match,
json: specialStringJson,
};
}
match = text.match(getRegExp('PAGEINSTANCE'));
if (match) {
return {
match,
json: pageInstanceJson,
};
}
return {
match: null,
json: {},
......
因为 它太大了无法显示 source diff 。你可以改为 查看blob
......@@ -14,7 +14,10 @@ function simplifySlugText(text) {
return text;
}
const tabs = ['/uniCloud/', '/plugin/', '/worktile/', '/tutorial/', '/collocation/', '/component/', '/api/', '/uts/', '/uni-app-x/', '/']
// 顺序有要求,会影响 for 循环匹配侧边栏
const tabs = [
'/plugin/', '/worktile/', '/tutorial/', '/collocation/', '/component/', '/api/', '/',
]
module.exports = {
isExternal,
......
{"manifest":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| appid | string | - | [DCloud AppID 使用说明](https://ask.dcloud.net.cn/article/35907) |\n| name | string | - | 应用名称 |\n| description | string | - | 应用描述 |\n| versionName | string | - | 应用版本名称 |\n| versionCode | integer | - | 应用版本号,必须是整数,取值范围1~2147483647;升级时必须高于上一次设置的值。 |\n| locale | '' | - | 默认语言 |\n| fallbackLocale | '' | - | 默认回退语言 |\n| uni-app-x | [uni-app-x 配置项列表](#manifest-uni-app-x) | - | 存在uni-app-x节点则表示为uni-app x项目 |\n| app | [app 配置项列表](#manifest-app) | - | App端(原生App)配置 |","description":"[配置指南](http://uniapp.dcloud.io/manifest)"},"manifest_uni-app-x":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| flex-direction | 'row' \\| 'row-reverse' \\| 'column' \\| 'column-reverse' | column | uvue页面默认flex排列方向 |","description":"存在uni-app-x节点则表示为uni-app x项目"},"manifest_app":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| distribute | [distribute 配置项列表](#app-distribute) | - | App端发布配置 |","description":"App端(原生App)配置"},"app_distribute":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| syncDebug | boolean | - | 是否为自定义调试基座 |\n| icons | [icons 配置项列表](#distribute-icons) | - | iOS、Android应用图标配置。云打包后生效,建议在HBuilderX中 manifest.json 的可视化界面操作,不推荐手动在源码视图中修改。 |\n| android | [android 配置项列表](#distribute-android) | - | App-Android端发布配置 |\n| ios | [ios 配置项列表](#distribute-ios) | - | IOS配置 |","description":"App端发布配置"},"distribute_icons":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| android | [android 配置项列表](#icons-android) | - | Android图标配置 |\n| ios | [ios 配置项列表](#icons-ios) | - | iOS图标配置 |","description":"iOS、Android应用图标配置。云打包后生效,建议在HBuilderX中 manifest.json 的可视化界面操作,不推荐手动在源码视图中修改。"},"icons_android":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| hdpi | string | - | 高分屏设备程序图标,分辨率要求72x72 |\n| xhdpi | string | - | 720P高分屏设备程序图标,分辨率要求96x96 |\n| xxhdpi | string | - | 1080P高分屏设备程序图标,分辨率要求144x144 |\n| xxxhdpi | string | - | 2K屏设备程序图标,分辨率要求192x192 |"},"icons_ios":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| appstore | string | - | 提交app store使用的图标 1024x1024 |\n| iphone | [iphone 配置项列表](#ios-iphone) | - | iPhone图标配置 |\n| ipad | [ipad 配置项列表](#ios-ipad) | - | iPad图标配置 |"},"ios_iphone":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| app@2x | string | - | iOS9.0+ 程序图标(2x) |\n| app@3x | string | - | iOS9.0+ 程序图标(3x) |\n| spotlight@2x | string | - | iOS9.0+ Spotlight图标(2x) |\n| spotlight@3x | string | - | iOS9.0+ Spotlight图标(3x) |\n| settings@2x | string | - | iOS9.0+ Settings设置图标(2x) |\n| settings@3x | string | - | iOS9.0+ Settings设置图标(3x) |\n| notification@2x | string | - | iOS9.0+ 通知栏图标(2x) |\n| notification@3x | string | - | iOS9.0+ 通知栏图标(3x) |"},"ios_ipad":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| app | string | - | iOS9.0+ 程序图标 |\n| app@2x | string | - | iOS9.0+ 程序图标(2x) |\n| proapp@2x | string | - | iOS9.0+ 程序图标(3x) |\n| spotlight | string | - | iOS9.0+ Spotlight图标 |\n| spotlight@2x | string | - | iOS9.0+ Spotlight图标(2x) |\n| settings | string | - | iOS9.0+ Settings设置图标 |\n| settings@2x | string | - | iOS9.0+ Settings设置图标(2x) |\n| notification | string | - | iOS9.0+ 通知栏图标 |\n| notification@2x | string | - | iOS9.0+ 通知栏图标(2x) |"},"distribute_android":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| minSdkVersion | integer | 21 | 应用兼容的最低Android版本(API等级);[参考文档](https://uniapp.dcloud.io/tutorial/app-android-minsdkversion) |\n| targetSdkVersion | integer | 30 | 应用适配的目标Android版本(API等级),部分应用市场要求设置较高的targetSdkVersion才能提交审核;[参考文档](https://uniapp.dcloud.io/tutorial/app-android-targetsdkversion) |\n| abiFilters | Array\\<'armeabi-v7a' \\| 'arm64-v8a' \\| 'x86' \\| 'x86_64'> | [\"arm64-v8a\"\\] | [参考文档](https://uniapp.dcloud.io/tutorial/app-android-abifilters) |","description":"App-Android端发布配置"},"distribute_ios":{"table":"| 属性 | 类型 | 默认值 | 描述 |\n| :- | :- | :- | :- |\n| appid | string | - | iOS Bundle ID |"},"tutorial":"## 参见\n[相关 Bug](https://issues.dcloud.net.cn/?mid=collocation.manifest_json)"}
\ No newline at end of file
{"lifeCycle":{"name":"页面生命周期","compatibility":"| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| onInit | x | x | x | x | x | x |\n| onLoad | 5.0 | √ | √ | 10.0 | √ | x |\n| onShow | 5.0 | √ | √ | 10.0 | √ | x |\n| onReady | 5.0 | √ | √ | 10.0 | √ | x |\n| onHide | 5.0 | √ | √ | 10.0 | √ | x |\n| onUnload | 5.0 | √ | √ | 10.0 | √ | x |\n| onPullDownRefresh | 5.0 | √ | √ | 10.0 | √ | x |\n| onReachBottom | 5.0 | √ | √ | 10.0 | √ | x |\n| onShareAppMessage | x | x | x | x | x | x |\n| onShareTimeline | x | x | x | x | x | x |\n| onAddToFavorites | x | x | x | x | x | x |\n| onPageScroll | 5.0 | √ | √ | 10.0 | √ | x |\n| onResize | 5.0 | √ | √ | 10.0 | √ | x |\n| onTabItemTap | 5.0 | √ | x | 10.0 | √ | x |\n| onNavigationBarButtonTap | 5.0 | √ | x | 10.0 | √ | x |\n| onBackPress | 5.0 | √ | √ | 10.0 | √ | x |\n| onNavigationBarSearchInputChanged | 5.0 | √ | x | 10.0 | √ | x |\n| onNavigationBarSearchInputConfirmed | 5.0 | √ | x | 10.0 | √ | x |\n| onNavigationBarSearchInputClicked | 5.0 | √ | x | 10.0 | √ | x |"}}
\ No newline at end of file
{"pages":{"compatibility":"**pages.json 兼容性** \n| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| globalStyle | 5.0 | √ | √ | 10.0 | √ | x |\n| pages | 5.0 | √ | √ | 10.0 | √ | x |\n| tabBar | 5.0 | √ | √ | 10.0 | √ | x |\n| condition | 5.0 | √ | √ | 10.0 | √ | x |\n| easycom | 5.0 | 2.5.5+ | √ | 10.0 | 2.5.5+ | x |","table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| globalStyle | [globalStyle 配置项列表](#pages-globalstyle) | - | 否 | - |\n| pages | Array\\<[PagesOptionsPage](#pagesoptionspage)> | - | 是 | 页面路径及窗口表现 |\n| tabBar | [tabBar 配置项列表](#pages-tabbar) | - | 否 | - |\n| condition | [condition 配置项列表](#pages-condition) | - | 否 | - |\n| easycom | [easycom 配置项列表](#pages-easycom) | - | 否 | 组件自动引入规则 |"},"pages_globalStyle":{"compatibility":"**globalStyle 兼容性** \n| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| navigationBarBackgroundColor | 5.0 | √ | √ | 10.0 | √ | x |\n| navigationBarTextStyle | 5.0 | √ | √ | 10.0 | √ | x |\n| navigationBarTitleText | 5.0 | √ | √ | 10.0 | √ | x |\n| navigationStyle | 5.0 | 2.0.3+ | √ | 10.0 | 2.0.3+ | x |\n| enablePullDownRefresh | 5.0 | √ | √ | 10.0 | √ | x |","table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| navigationBarBackgroundColor | string (string.ColorString) | APP与H5为#F8F8F8,小程序平台请参考相应小程序文档 | 否 | 导航栏背景颜色(同状态栏背景色) |\n| navigationBarTextStyle | 'white' \\| 'black' | black | 否 | 导航栏标题颜色,仅支持 black/white(支付宝小程序不支持,请使用 [my.setNavigationBar](https://opendocs.alipay.com/mini/api/xwq8e6))。 |\n| navigationBarTitleText | string | - | 否 | 导航栏标题文字内容 |\n| navigationStyle | 'default' \\| 'custom' | default | 否 | 导航栏样式,仅支持 default/custom。custom即取消默认的原生导航栏,需看[使用注意](/collocation/pages.md?id=customnav)。 |\n| enablePullDownRefresh | boolean | false | 否 | 是否开启下拉刷新,详见[页面生命周期](/tutorial/page.md?id=lifecycle)。 |"},"PagesOptionsPage":{"compatibility":"**PagesOptionsPage 兼容性** \n| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| path | 5.0 | √ | √ | 10.0 | √ | x |\n| style | 5.0 | √ | √ | 10.0 | √ | x |","table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| path | string (string.PageURIString) | - | 是 | 配置页面路径 |\n| style | [style 配置项列表](#pagesoptionspage-style) | - | 否 | - |"},"PagesOptionsPage_style":{"compatibility":"**style 兼容性** \n| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| navigationBarBackgroundColor | 5.0 | √ | √ | 10.0 | √ | x |\n| navigationBarTextStyle | 5.0 | √ | √ | 10.0 | √ | x |\n| navigationBarTitleText | 5.0 | √ | √ | 10.0 | √ | x |\n| navigationStyle | 5.0 | 2.0.3+ | √ | 10.0 | 2.0.3+ | x |\n| enablePullDownRefresh | 5.0 | √ | √ | 10.0 | √ | x |","table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| navigationBarBackgroundColor | string (string.ColorString) | APP与H5为#F8F8F8,小程序平台请参考相应小程序文档 | 否 | 导航栏背景颜色(同状态栏背景色) |\n| navigationBarTextStyle | 'white' \\| 'black' | black | 否 | 导航栏标题颜色,仅支持 black/white |\n| navigationBarTitleText | string | - | 否 | 导航栏标题文字内容 |\n| navigationStyle | 'default' \\| 'custom' | default | 否 | 导航栏样式,仅支持 default/custom。custom即取消默认的原生导航栏,需看[使用注意](/collocation/pages.md?id=customnav)。 |\n| enablePullDownRefresh | boolean | false | 否 | 是否开启下拉刷新,详见[页面生命周期](/tutorial/page.md#lifecycle)。 |\n| h5 | [h5 配置项列表](#style-h5) | - | 否 | - |\n| mp-alipay | [mp-alipay 配置项列表](#style-mp-alipay) | - | 否 | - |"},"style_h5":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| titleNView | [titleNView 配置项列表](#h5-titlenview) | - | 否 | - |\n| pullToRefresh | [pullToRefresh 配置项列表](#h5-pulltorefresh) | - | 否 | - |"},"h5_titleNView":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| backgroundColor | string (string.ColorString) | #f7f7f7 | 否 | 背景颜色,颜色值格式为\"#RRGGBB\"。 |\n| buttons | array | - | 否 | 自定义按钮,参考 [buttons](/collocation/pages.md?id=h5-titlenview-buttons)。 |\n| titleColor | string (string.ColorString) | #000000 | 否 | 标题文字颜色 |\n| titleText | string | - | 否 | 标题文字内容 |\n| titleSize | string | - | 否 | 标题文字字体大小 |\n| type | 'default' \\| 'transparent' | default | 否 | 导航栏样式。\"default\"-默认样式;\"transparent\"-透明渐变。 |\n| searchInput | object | - | 否 | 导航栏上的搜索框样式,详见:[searchInput](/collocation/pages.md?id=h5-searchinput)。 |"},"h5_pullToRefresh":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| support | boolean | - | 否 | 是否开启窗口的下拉刷新功能 |\n| color | string (string.ColorString) | - | 否 | 颜色值格式为\"#RRGGBB\",仅\"circle\"样式下拉刷新支持此属性。 |\n| type | 'default' \\| 'circle' | - | 否 | 下拉刷新控件样式 |\n| height | string | - | 否 | 窗口的下拉刷新控件进入刷新状态的拉拽高度。支持百分比,如\"10%\";像素值,如\"50px\"。 |\n| range | string | - | 否 | 窗口可下拉拖拽的范围。支持百分比,如\"10%\";像素值,如\"50px\"。 |\n| offset | string | - | 否 | 下拉刷新控件的起始位置。仅对\"circle\"样式下拉刷新控件有效,用于定义刷新控件下拉时的起始位置。支持百分比,如\"10%\";像素值,如\"50px\"。 |\n| contentdown | [contentdown 配置项列表](#pulltorefresh-contentdown) | - | 否 | - |\n| contentover | [contentover 配置项列表](#pulltorefresh-contentover) | - | 否 | - |\n| contentrefresh | [contentrefresh 配置项列表](#pulltorefresh-contentrefresh) | - | 否 | - |"},"pullToRefresh_contentdown":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| caption | string | - | 否 | 下拉刷新控件上显示的标题内容 |"},"pullToRefresh_contentover":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| caption | string | - | 否 | 下拉刷新控件上显示的标题内容 |"},"pullToRefresh_contentrefresh":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| caption | string | - | 否 | 下拉刷新控件上显示的标题内容 |"},"style_mp-alipay":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| allowsBounceVertical | 'YES' \\| 'NO' | YES | 否 | 是否允许向下拉拽。支持 YES / NO |\n| transparentTitle | 'always' \\| 'auto' \\| 'none' | none | 否 | 导航栏透明设置。支持 always 一直透明 / auto 滑动自适应 / none 不透明 |\n| titlePenetrate | 'YES' \\| 'NO' | No | 否 | 导航栏点击穿透 |\n| showTitleLoading | 'YES' \\| 'NO' | No | 否 | 是否进入时显示导航栏的 loading。支持 YES / NO |\n| titleImage | string | - | 否 | 导航栏图片地址,替换导航栏标题,必须为https的图片链接地址 |\n| backgroundImageUrl | string (string.ImageURIString) | - | 否 | 下拉露出显示的背景图链接 |\n| backgroundImageColor | string (string.ColorString) | - | 否 | 下拉露出显示的背景图底色 |\n| gestureBack | 'YES' \\| 'NO' | No | 否 | 支付宝小程序 iOS 用,是否支持手势返回。支持 YES / NO |\n| enableScrollBar | 'YES' \\| 'NO' | YES | 否 | 支付宝小程序 Android 用,是否显示 WebView 滚动条。支持 YES / NO。 |"},"pages_tabBar":{"compatibility":"**tabBar 兼容性** \n| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| color | 5.0 | √ | √ | 10.0 | √ | x |\n| selectedColor | 5.0 | √ | √ | 10.0 | √ | x |\n| backgroundColor | 5.0 | √ | √ | 10.0 | √ | x |\n| list | 5.0 | √ | √ | 10.0 | √ | x |\n| backgroundImage | 5.0 | √ | √ | 10.0 | √ | x |\n| backgroundRepeat | 5.0 | √ | √ | 10.0 | √ | x |\n| redDotColor | 5.0 | √ | √ | 10.0 | √ | x |","table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| color | string (string.ColorString) | - | 是 | tab 上的文字默认颜色 |\n| selectedColor | string (string.ColorString) | - | 是 | tab 上的文字选中时的颜色 |\n| backgroundColor | string (string.ColorString) | - | 是 | tab 的背景色 |\n| list | Array\\<[PagesOptionsTabbarList](#pagesoptionstabbarlist)> | - | 是 | tab 的列表,详见 list 属性说明,最少2个、最多5个 tab |\n| backgroundImage | string | - | 否 | 设置背景图片,优先级高于 backgroundColor |\n| backgroundRepeat | 'repeat' \\| 'repeat-x' \\| 'repeat-y' \\| 'no-repeat' | no-repeat | 否 | 设置标题栏的背景图平铺方式 |\n| redDotColor | string (string.ColorString) | - | 否 | tabbar上红点颜色 |"},"PagesOptionsTabbarList":{"compatibility":"**PagesOptionsTabbarList 兼容性** \n| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| iconfont | 5.0 | 3.4.4+ | √ | 10.0 | 3.4.4+ | x |\n| pagePath | 5.0 | √ | √ | 10.0 | √ | x |\n| text | 5.0 | √ | √ | 10.0 | √ | x |\n| iconPath | 5.0 | √ | √ | 10.0 | √ | x |\n| selectedIconPath | 5.0 | √ | √ | 10.0 | √ | x |\n| visible | 5.0 | 3.2.10+ | √ | 10.0 | 3.2.10+ | x |","table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| iconfont | [iconfont 配置项列表](#pagesoptionstabbarlist-iconfont) | - | 否 | 字体图标,优先级高于 iconPath |\n| pagePath | string (string.PageURIString) | - | 是 | 页面路径,必须在 pages 中先定义 |\n| text | string | - | 是 | tab 上按钮文字,在 App 和 H5 平台为非必填。例如中间可放一个没有文字的+号图标 |\n| iconPath | string (string.ImageURIString) | - | 否 | 图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px,当 position 为 top 时,此参数无效,不支持网络图片,不支持字体图标 |\n| selectedIconPath | string (string.ImageURIString) | - | 否 | 选中时的图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px ,当 position 为 top 时,此参数无效 |\n| visible | string | - | 否 | 该项是否显示,默认显示 |"},"PagesOptionsTabbarList_iconfont":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| text | string | - | 否 | 字库 Unicode 码 |\n| selectedText | string | - | 否 | 选中后字库 Unicode 码 |\n| fontSize | string | - | 否 | 字体图标字号(px) |\n| color | string (string.ColorString) | - | 否 | 字体图标颜色 |\n| selectedColor | string (string.ColorString) | - | 否 | 字体图标选中颜色 |","description":"字体图标,优先级高于 iconPath"},"pages_condition":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| current | number | - | 是 | 当前激活的模式,list节点的索引值。 |\n| list | Array\\<[PagesConditionItem](#pagesconditionitem)> | - | 是 | 启动模式列表 |"},"PagesConditionItem":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| name | string | - | 是 | 启动模式名称 |\n| path | string (string.PageURIString) | - | 是 | 启动页面路径 |\n| query | string | - | 否 | 启动参数,可在页面的 onLoad 函数里获得 |"},"pages_easycom":{"table":"| 属性 | 类型 | 默认值 | 必填 | 描述 |\n| :- | :- | :- | :- | :- |\n| autoscan | boolean | true | 否 | 是否开启自动扫描,开启后将会自动扫描符合components/组件名称/组件名称.vue/uvue目录结构的组件 |\n| custom | object | - | 否 | 以正则方式自定义组件匹配规则。如果autoscan不能满足需求,可以使用custom自定义匹配规则 |","description":"组件自动引入规则"},"tutorial":"## 参见\n[相关 Bug](https://issues.dcloud.net.cn/?mid=collocation.pages_json)"}
\ No newline at end of file
{"specialString":{"name":"### 特殊 String @special-string","table":"| 名称 | 描述 |\n| :- | :- |\n| AttrString | 元素上的属性 |\n| AttrValueString | 元素上某个属性的值 |\n| ClassString | 元素全局属性`class`的值 |\n| IDString | 元素全局属性`id`的值 |\n| HTMLEventString | 元素上的事件 |\n| ColorString | CSS颜色的值 |\n| RequireCommonString | 提示common模块 以及js文件路径 |\n| VueI18NKeyString | 国际化翻译的key值 |\n| VueDataString | vue默认参数data中的属性名称 |\n| VueRefString | vue组件中ref属性的值 |\n| VuexDispatchString | vuex 中 actions 的名称 |\n| VuexCommitString | vuex 中 mutations 的名称 |\n| PageURIString | vue, nvue, uvue页面文件的文件路径(根据项目自动匹配) |\n| NPageURIString | nvue页面文件的文件路径 |\n| UPageURIString | uvue页面文件的文件路径, 仅在uniappx中生效 |\n| VideoIdString | video 组件的 id, 仅在uniappx中生效 |\n| WebviewIdString | web-view 组件的 id, 仅在uniappx中生效 |\n| ParentFieldString | uniCloud db schema中parentKey的值 |\n| SchemaFieldString | uniCloud db schema中required数组的值 |\n| ValidateFunctionString | uniCloud db schema中validateFunction的值 |\n| CloudFunctionString | uniCloud 云函数名 |\n| CloudObjectString | uniCloud 云对象名 |\n| DBCollectionString | uniCloud 数据库集合的名称 |\n| DBFieldString | uniCloud 数据库字段名称 |\n| JQLString | uniCloud 数据库要操作的集合, 要查询的字段 |\n| cssPropertyString | CSS属性的名称 |\n| cssPropertyValueString | CSS某个属性的值 |\n| cssSelectorString | CSS选择器的名称 |\n| URIString | 任意文件的文件路径 |\n| CSSURIString | css文件的文件路径(后缀为`.css`的文件路径) |\n| JSURIString | js文件的文件路径(后缀为`.js`的文件路径) |\n| HTMLURIString | html文件的文件路径(后缀为`.html`的文件路径) |\n| MarkdownURIString | markdown文件的文件路径(后缀为`.md`的文件路径) |\n| ScriptImportURIString | js, ts, uts引用文件或模块的文件路径(支持vue,nvue,uvue中script标签内容), 例: `import xxx from 'xxx'` |\n| CssImportURIString | css文件可以引用的文件的文件路径, 后缀为`[\".css\"\\]`的文件路径 例: `@import url('xxx.css')` |\n| ScssImportURIString | scss文件可以引用的文件的文件路径, 后缀为`[\".scss\", \".css\"\\]`的文件路径, 例: `@import 'xxx.scss'` |\n| LessImportURIString | less文件可以引用的文件的文件路径, 后缀为`[\".less\", \".css\"\\]`的文件路径, 例: `@import 'xxx.less'` |\n| FontURIString | 字体文件的文件路径 |\n| ImageURIString | 图片文件的文件路径 |\n| AudioURIString | 音频文件的文件路径 |\n| VideoURIString | 视频文件的文件路径 |"}}
\ No newline at end of file
因为 它太大了无法显示 source diff 。你可以改为 查看blob
{
"application": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| app.component() | 5.0 | √ | √ | 10.0 | √ | x |\n| app.directive() | 5.0 | √ | x | 10.0 | √ | x |\n| app.use() | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| app.mixin() | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| app.provide() | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| app.config | 5.0 | √ | √ | 10.0 | √ | x |\n| app.config.errorHandler | 5.0 | √ | x | 10.0 | √ | x |\n| app.config.warnHandler | 5.0 | √ | x | 10.0 | √ | x |\n| app.config.performance | 5.0 | √ | x | 10.0 | √ | x |\n| app.config.globalProperties | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| app.config.optionMergeStrategies | 5.0 | √ | x | 10.0 | √ | x |"
},
"general": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| nextTick() | 5.0 | x | √ | 10.0 | x | x |\n| defineComponent() | 5.0 | x | x | 10.0 | x | x |\n| defineAsyncComponent() | 5.0 | x | x | 10.0 | x | x |"
},
"reactivity_core": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| ref() | 5.0 | √ | √ | 10.0 | √ | x |\n| computed() | 5.0 | √ | x | 10.0 | √ | x |\n| reactive() | 5.0 | √ | √ | 10.0 | √ | x |\n| readonly() | 5.0 | √ | x | 10.0 | √ | x |\n| watchEffect() | 5.0 | √ | x | 10.0 | √ | x |\n| watch() | 5.0 | √ | x | 10.0 | √ | x |"
},
"reactivity_utilities": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| isRef() | 5.0 | √ | x | 10.0 | √ | x |\n| unref() | 5.0 | √ | x | 10.0 | √ | x |\n| toRef() | 5.0 | √ | x | 10.0 | √ | x |\n| toRefs() | 5.0 | √ | x | 10.0 | √ | x |\n| isProxy() | 5.0 | √ | x | 10.0 | √ | x |\n| isReactive() | 5.0 | √ | x | 10.0 | √ | x |\n| isReadonly() | 5.0 | √ | x | 10.0 | √ | x |"
},
"reactivity_advanced": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| shallowRef() | 5.0 | √ | x | 10.0 | √ | x |\n| triggerRef() | 5.0 | √ | x | 10.0 | √ | x |\n| customRef() | 5.0 | √ | x | 10.0 | √ | x |\n| shallowReactive() | 5.0 | √ | x | 10.0 | √ | x |\n| shallowReadonly() | 5.0 | √ | x | 10.0 | √ | x |\n| toRaw() | 5.0 | √ | x | 10.0 | √ | x |\n| markRaw() | 5.0 | √ | x | 10.0 | √ | x |"
},
"options_state": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| data | 5.0 | √ | √ | 10.0 | √ | x |\n| props | 5.0 | √ | √ | 10.0 | √ | x |\n| computed | 5.0 | √ | √ | 10.0 | √ | x |\n| methods | 5.0 | √ | √ | 10.0 | √ | x |\n| watch | 5.0 | √ | √ | 10.0 | √ | x |\n| emits | 5.0 | √ | √ | 10.0 | √ | x |"
},
"options_rendering": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| template | 5.0 | x | x | 10.0 | x | x |\n| render | 5.0 | x | 3.99 | 10.0 | x | x |"
},
"options_lifecycle": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| beforeCreate | 5.0 | √ | √ | 10.0 | √ | x |\n| created | 5.0 | √ | √ | 10.0 | √ | x |\n| beforeMount | 5.0 | √ | √ | 10.0 | √ | x |\n| mounted | 5.0 | √ | √ | 10.0 | √ | x |\n| beforeUpdate | 5.0 | √ | √ | 10.0 | √ | x |\n| updated | 5.0 | √ | √ | 10.0 | √ | x |\n| beforeUnmount | 5.0 | √ | √ | 10.0 | √ | x |\n| unmounted | 5.0 | √ | √ | 10.0 | √ | x |\n| errorCaptured | 5.0 | √ | x | 10.0 | √ | x |\n| renderTracked | 5.0 | √ | x | 10.0 | √ | x |\n| renderTriggered | 5.0 | √ | x | 10.0 | √ | x |\n| activated | 5.0 | √ | x | 10.0 | √ | x |\n| deactivated | 5.0 | √ | x | 10.0 | √ | x |"
},
"options_composition": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| provide | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| inject | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| mixins | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| extends | 5.0 | √ | x | 10.0 | √ | x |"
},
"options_misc": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| name | 5.0 | √ | √ | 10.0 | √ | x |\n| inheritAttrs | 5.0 | √ | √ | 10.0 | √ | x |\n| components | 5.0 | √ | √ | 10.0 | √ | x |\n| directives | 5.0 | √ | x | 10.0 | √ | x |"
},
"component_instance": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| $data | 5.0 | √ | √ | 10.0 | √ | x |\n| $props | 5.0 | √ | √ | 10.0 | √ | x |\n| $el | 5.0 | x | √ | 10.0 | x | x |\n| $options | 5.0 | √ | √ | 10.0 | √ | x |\n| $parent | 5.0 | √ | √ | 10.0 | √ | x |\n| $root | 5.0 | √ | √ | 10.0 | √ | x |\n| $slots | 5.0 | x | √ | 10.0 | √ | x |\n| $refs | 5.0 | √ | √ | 10.0 | √ | x |\n| $attrs | 5.0 | √ | √ | 10.0 | √ | x |\n| $watch() | 5.0 | √ | √ | 10.0 | √ | x |\n| $emit | 5.0 | √ | √ | 10.0 | √ | x |\n| $forceUpdate | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| $nextTick | 5.0 | √ | √ | 10.0 | √ | x |\n| $callMethod | 5.0 | x | √ | 10.0 | x | x |"
},
"directives": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| v-text | 5.0 | √ | √ | 10.0 | √ | x |\n| v-html | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| v-show | 5.0 | √ | √ | 10.0 | √ | x |\n| v-if | 5.0 | √ | √ | 10.0 | √ | x |\n| v-else | 5.0 | √ | √ | 10.0 | √ | x |\n| v-else-if | 5.0 | √ | √ | 10.0 | √ | x |\n| v-for | 5.0 | √ | √ | 10.0 | √ | x |\n| v-on | 5.0 | √ | √ | 10.0 | √ | x |\n| v-bind | 5.0 | √ | √ | 10.0 | √ | x |\n| v-model | 5.0 | √ | √ | 10.0 | √ | x |\n| v-slot | 5.0 | √ | √ | 10.0 | √ | x |\n| v-pre | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| v-once | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| v-memo | 5.0 | x | 3.99 | 10.0 | x | x |\n| v-cloak | 5.0 | x | x | 10.0 | x | x |"
},
"components": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| \\<Transition> | 5.0 | x | x | 10.0 | x | x |\n| \\<TransitionGroup> | 5.0 | x | x | 10.0 | x | x |\n| \\<KeepAlive> | 5.0 | x | x | 10.0 | x | x |\n| \\<Teleport> | 5.0 | x | x | 10.0 | x | x |"
},
"special_elements": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| \\<component> | 5.0 | √ | 3.99 | 10.0 | √ | x |\n| \\<slot> | 5.0 | √ | √ | 10.0 | √ | x |\n| \\<template> | 5.0 | √ | √ | 10.0 | √ | x |"
},
"special_attributes": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| key | 5.0 | √ | √ | 10.0 | √ | x |\n| ref | 5.0 | √ | √ | 10.0 | √ | x |\n| is | 5.0 | √ | 3.99 | 10.0 | √ | x |"
},
"render_function": {
"compatibility": "| | 安卓系统版本 | 安卓 uni-app | 安卓 uni-app-x | iOS 系统版本 | iOS uni-app | iOS uni-app-x |\n| :- | :- | :- | :- | :- | :- | :- |\n| h() | 5.0 | x | 3.99 | 10.0 | x | x |\n| resolveComponent() | 5.0 | x | √ | 10.0 | x | x |\n| resolveDirective() | 5.0 | x | x | 10.0 | x | x |\n| withDirectives() | 5.0 | x | √ | 10.0 | x | x |"
}
}
\ No newline at end of file
此差异已折叠。
......@@ -19,29 +19,32 @@
* [插屏广告](uni-ad/ad-interstitial.md)
* [Draw视频信息流广告](uni-ad/ad-draw.md)
* [短视频内容联盟广告](uni-ad/ad-content-page.md)
* [互动广告](uni-ad/ad-interactive.md)
* [微信小程序](uni-ad/ad-weixin.md)
* [微信小程序视频广告](uni-ad/ad-video.md)
* [微信小程序格子广告](uni-ad/ad-grid.md)
* [微信小程序互动广告](uni-ad/ad-interactive.md)
* [广告错误码](uni-ad/ad-error-code.md)
* [uni-ad管理后台更新说明](uni-ad/release.md)
* [统一发行页面](/uniCloud/uni-portal.md)
* [前端网页托管](uniCloud/hosting.md)
* [App升级中心](uniCloud/upgrade-center.md)
* [统一发行页面](https://doc.dcloud.net.cn/uniCloud/uni-portal.html)
* [前端网页托管](https://doc.dcloud.net.cn/uniCloud/hosting.html)
* [App升级中心](https://doc.dcloud.net.cn/uniCloud/upgrade-center.html)
* [uni一键登录](univerify.md)
* [uni实人认证](uniCloud/frv/intro.md)
* [uni实人认证](https://doc.dcloud.net.cn/uniCloud/frv/intro.html)
* [uni-push统一推送](unipush.md)
* [uni-push1.0](unipush-v1.md)
* [uni-push2.0](unipush-v2.md)
* [业务文档](unipush-v2.md)
* 开发文档
* [客户端api](api/plugins/push.md)
* [服务端api](uniCloud/uni-cloud-push/api.md)
* [uni-push2.0、uni-id、uni统计的组合](uniCloud/uni-cloud-push/mate.md)
* [uni-app客户端api](https://uniapp.dcloud.net.cn/api/plugins/push.html)
* [uni-app x客户端api](https://doc.dcloud.net.cn/uni-app-x/api/push.html)
* [服务端api](https://doc.dcloud.net.cn/uniCloud/uni-cloud-push/api.html)
* [uni-push2.0、uni-id、uni统计的组合](https://doc.dcloud.net.cn/uniCloud/uni-cloud-push/mate.html)
* [uni统计](uni-stat.md)
* [uni统计2.0](uni-stat-v2.md)
* [uni统计1.0](uni-stat-v1.md)`
* [uni加固](uni-app-security.md)
* [uni加固](/tutorial/app-security.md)
* [uni隐私合规检测](/tutorial/app-privacy-detect.md)
* [地图商业授权](/tutorial/app-geolocation.md?id=lic)
* [案例](case.md)
* 更新日志
* [正式版](release.md)
......@@ -53,4 +56,4 @@
* [Alpha版 Vue2 CLI 配置](vue2-cli-alpha-release.md)
* [Alpha版 Vue3 CLI 配置](vue3-cli-alpha-release.md)
* [Alpha版 Vue2 Ts CLI 配置](vue2-ts-cli-alpha-release.md)
* [Alpha版 Vue3 Ts CLI 配置](vue3-ts-cli-alpha-release.md)
\ No newline at end of file
* [Alpha版 Vue3 Ts CLI 配置](vue3-ts-cli-alpha-release.md)
此差异已折叠。
### uni.createCanvasContext(canvasId, this)
#### 定义
创建 ```canvas``` 绘图上下文(指定 canvasId)。在自定义组件下,第二个参数传入组件实例this,以操作组件内 ```<canvas/>``` 组件
**Tip:** 需要指定 canvasId,该绘图上下文只作用于对应的 `<canvas/>`
#### 参数
|参数|类型|说明|
|----|----|-----|
|canvasId|String |画布表示,传入定义在 `<canvas/>` 的 canvas-id或id(支付宝小程序是id、其他平台是canvas-id) |
|componentInstance|Object |自定义组件实例 this ,表示在这个自定义组件下查找拥有 canvas-id 的 `<canvas/>` ,如果省略,则不在任何自定义组件内查找 |
#### 返回值
[CanvasContext](/api/canvas/CanvasContext.md)
\ No newline at end of file
### uni.createCanvasContext(canvasId, this)
#### 定义
创建 ```canvas``` 绘图上下文(指定 canvasId)。在自定义组件下,第二个参数传入组件实例this,以操作组件内 ```<canvas/>``` 组件
**Tip:** 需要指定 canvasId,该绘图上下文只作用于对应的 `<canvas/>`
#### 参数
|参数|类型|说明|
|----|----|-----|
|canvasId|String |画布标识,传入定义在 `<canvas/>` 的 canvas-id或id(支付宝小程序是id、其他平台是canvas-id) |
|componentInstance|Object |自定义组件实例 this ,表示在这个自定义组件下查找拥有 canvas-id 的 `<canvas/>` ,如果省略,则不在任何自定义组件内查找 |
#### 返回值
[CanvasContext](/api/canvas/CanvasContext.md)
......@@ -226,7 +226,7 @@ uni-app的runtime不适合内置很多waiting样式和资源,而使用三方
> 如 uni.onUserCaptureScreen 的 callback 回调结果类型为:`type OnUserCaptureScreenCallbackResult = {}`
- [示例(获取电量)参考](https://gitcode.net/dcloud/uni-api/-/tree/dev/uni_modules/uni-getbatteryinfo)
- HBuilderX3.96及以下使用uni ext api后,云打包同时勾选android和iOS会导致打出来的包不能正确包含uni ext api插件,解决方案:升级至3.97+或android和iOS单独打包
## 如何使用uni ext api
......
......@@ -2,7 +2,7 @@
新增于`HBuilderX 3.1.15`,判断当前用户是否拥有某角色。此功能依赖uni-id[另见详情](https://uniapp.dcloud.io/uniCloud/uni-id)
需要应用关联[uniCloud](https://uniapp.dcloud.net.cn/uniCloud/README)服务空间并使用[uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id)
需要应用关联 [uniCloud](https://uniapp.dcloud.net.cn/uniCloud/README) 服务空间并使用 [uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id/summary.html)
> 需要在token内缓存角色权限才可使用,请参考:[缓存角色权限](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=cachepermissionintoken)
......@@ -33,9 +33,9 @@
新增于`HBuilderX 3.1.15`,判断当前用户是否拥有某权限,注意:admin角色的用户拥有所有权限。此功能依赖uni-id[另见详情](https://uniapp.dcloud.io/uniCloud/uni-id)
需要应用关联[uniCloud](https://uniapp.dcloud.net.cn/uniCloud/README)服务空间并使用[uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id)
需要应用关联 [uniCloud](https://uniapp.dcloud.net.cn/uniCloud/README) 服务空间并使用 [uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id/summary.html)
> 需要在token内缓存角色权限才可使用,请参考:[缓存角色权限](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=cachepermissionintoken)
> 需要在token内缓存角色权限才可使用,请参考:[缓存角色权限](https://uniapp.dcloud.net.cn/uniCloud/uni-id/summary.html#cache-permission-in-token)
**在模板内使用**
......@@ -58,4 +58,4 @@
}
}
</script>
```
\ No newline at end of file
```
......@@ -56,7 +56,7 @@ uni.getLocation({
});
```
#### 注意
**注意事项**
- `H5 平台`
- 在较新的浏览器上,H5 端获取定位信息,要求部署在 **https** 服务上,本地预览(localhost)仍然可以使用 http 协议。
......@@ -75,6 +75,7 @@ uni.getLocation({
- 持续定位方案:iOS端可以申请持续定位权限,[参考](https://ask.dcloud.net.cn/article/12569)。Android如果进程被杀,代码无法执行,可以在插件市场搜索[保活](https://ext.dcloud.net.cn/search?q=%E4%BF%9D%E6%B4%BB&cat1=5)相关原生语言插件避免App被系统杀死。即使使用了原生语言插件保活,也很容易被杀,此时可以使用[unipush](https://uniapp.dcloud.net.cn/unipush-v2.html) ,通过推送消息提示用户激活App
- `3.3.0 版本以上` 优化系统定位模块,可不使用三方定位SDK的进行高精度定位,具体参考:[系统定位](app/geolocation)
- 鸿蒙系统 不支持系统定位,需要配置三方sdk,比如高德,同时设置坐标系参数为 `type: 'gcj02'`
- 如需使用腾讯定位sdk,可下载[腾讯定位插件](https://ext.dcloud.net.cn/plugin?id=14569),在插件中配置key打包后生效,腾讯定位是[ext api插件](../../api/extapi.md)引用到工程后,会覆盖uni.getLocation的实现,替换掉系统定位。
- `小程序平台`
- api默认不返回详细地址中文描述。需要中文地址有2种方式:1、使用高德地图小程序sdk,在app和微信上都可以获得中文地址,[参考](http://ask.dcloud.net.cn/article/35070)。2、只考虑app,使用``plus.geolocation``也可以获取中文地址。manifest里的App SDK配置仅用于app,小程序无需在这里配置。
- 可以通过用户授权API来判断用户是否给应用授予定位权限,[详见](https://uniapp.dcloud.io/api/other/authorize)
......@@ -136,6 +137,7 @@ uni.chooseLocation({
- `微信内置浏览器` 中可使用微信js sdk,[详见](https://ask.dcloud.net.cn/article/35380)
- chooseLocation 属于封装型API,开发者若觉得不够灵活,可自行基于原始的 map 组件进行封装。插件市场已经有各种封装样例了。
-`Android App端` 位置不准,见上文 uni.getLocation 的注意事项
- 微信小程序在2023年10月17日之后,使用API需要配置[隐私协议](https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html)
### 三方定位和地图服务收费说明
......@@ -155,4 +157,4 @@ DCloud为开发者争取了福利,可优惠获取高德的商业授权。如
> 下载地址:[https://ext.dcloud.net.cn/plugin?name=unicloud-city-select](https://ext.dcloud.net.cn/plugin?name=unicloud-city-select)
> 文档地址:[https://uniapp.dcloud.net.cn/uniCloud/unicloud-city-select.html](https://uniapp.dcloud.net.cn/uniCloud/unicloud-city-select.html)
> 文档地址:[https://doc.dcloud.net.cn/uniCloud/unicloud-city-select.html](https://doc.dcloud.net.cn/uniCloud/unicloud-city-select.html)
......@@ -404,7 +404,7 @@ App nvue 3.6.9+ 支持
```
## mapSearch 模块(仅app-nvue支持,Goolge地图不支持)
### mapSearch 模块(仅app-nvue支持,Goolge地图不支持)
#### reverseGeocode(Object,callback);@reverseGeocode
> 反向地理编码
......
### uni.createInnerAudioContext()
创建并返回内部 audio 上下文 `innerAudioContext` 对象。
**平台差异说明**
|App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|√|√|√|1.23.4+|√|√|√|√|√|
**innerAudioContext 对象的属性列表**
|属性|类型|说明|只读|平台差异说明|
|:-|:-|:-|:-|:-|
|src|String|音频的数据链接,用于直接播放。|否|微信小程序不支持本地路径|
|startTime|Number|开始播放的位置(单位:s),默认 0|否||
|autoplay|Boolean|是否自动开始播放,默认 false|否|H5端部分浏览器不支持|
|loop|Boolean|是否循环播放,默认 false|否||
|obeyMuteSwitch|Boolean|是否遵循系统静音开关,当此参数为 false 时,即使用户打开了静音开关,也能继续发出声音,默认值 true|否|微信小程序、百度小程序、抖音小程序、飞书小程序、京东小程序、快手小程序(仅在 iOS 上生效)|
|duration|Number|当前音频的长度(单位:s),只有在当前有合法的 src 时返回,需要在onCanplay中获取|是||
|currentTime|Number|当前音频的播放位置(单位:s),只有在当前有合法的 src 时返回,时间不取整,保留小数点后 6 位|是||
|paused|Boolean|当前是是否暂停或停止状态,true 表示暂停或停止,false 表示正在播放|是||
|buffered|Number|音频缓冲的时间点,仅保证当前播放时间点到此时间点内容已缓冲。|是||
|volume|Number|音量。范围 0~1。|否|&nbsp;|
|sessionCategory|String|设置音频播放模式,可取值:"ambient" - 不中止其他声音播放,不能后台播放,静音后无声音; "soloAmbient" - 中止其他声音播放,不能后台播放,静音后无声音; "playback" - 中止其他声音,可以后台播放,静音后有声音。 默认值为"playback"。|否|App 3.3.7+|
|playbackRate|Number|播放的倍率。可取值:0.5/0.8/1.0/1.25/1.5/2.0,默认值为1.0|否|App 3.4.5+(Android 需要 6 及以上版本)、微信小程序 2.11.0、支付宝小程序、抖音小程序 2.33.0+、快手小程序、百度小程序 3.120.2+|
**innerAudioContext 对象的方法列表**
|方法|参数|说明|平台差异说明|
|:-|:-|:-|:-|
|play||播放(H5端部分浏览器需在用户交互时进行)||
|pause||暂停||
|stop||停止||
|seek|position|跳转到指定位置,单位 s||
|destroy||销毁当前实例||
|onCanplay|callback|音频进入可以播放状态,但不保证后面可以流畅播放||
|onPlay|callback|音频播放事件||
|onPause|callback|音频暂停事件||
|onStop|callback|音频停止事件||
|onEnded|callback|音频自然播放结束事件||
|onTimeUpdate|callback|音频播放进度更新事件||
|onError|callback|音频播放错误事件||
|onWaiting|callback|音频加载中事件,当音频因为数据不足,需要停下来加载时会触发||
|onSeeking|callback|音频进行 seek 操作事件||
|onSeeked|callback|音频完成 seek 操作事件||
|offCanplay|callback|取消监听 onCanplay 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offPlay|callback|取消监听 onPlay 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offPause|callback|取消监听 onPause 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offStop|callback|取消监听 onStop 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offEnded|callback|取消监听 onEnded 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offTimeUpdate|callback|取消监听 onTimeUpdate 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offError|callback|取消监听 onError 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offWaiting|callback|取消监听 onWaiting 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offSeeking|callback|取消监听 onSeeking 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offSeeked|callback|取消监听 onSeeked 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
errCode 说明
|errCode|说明|
|:-|:-|
|10001|系统错误|
|10002|网络错误|
|10003|文件错误|
|10004|格式错误|
|-1|未知错误|
**支持格式**
|格式|iOS|Android|
|:-|:-|:-|
|flac |x|√|
|m4a |√|√|
|ogg |x|√|
|ape |x|√|
|amr |x|√|
|wma |x|√|
|wav |√|√|
|mp3 |√|√|
|mp4 |x|√|
|aac |√|√|
|aiff |√|x|
|caf |√|x|
**示例**
```javascript
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
innerAudioContext.src = 'https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-hello-uniapp/2cc220e0-c27a-11ea-9dfb-6da8e309e0d8.mp3';
innerAudioContext.onPlay(() => {
console.log('开始播放');
});
innerAudioContext.onError((res) => {
console.log(res.errMsg);
console.log(res.errCode);
});
```
**tips**
- 如需音频的倍速播放,可通过video的倍速播放替代实现。插件市场有封装好的插件[音频倍速播放](https://ext.dcloud.net.cn/search?q=%E9%9F%B3%E9%A2%91%E5%80%8D%E9%80%9F%E6%92%AD%E6%94%BE)
- 如果需要带ui的音频播放器样式,可以在插件市场搜索相关[插件](https://ext.dcloud.net.cn/search?q=audio)
- `Android 4.1` 及更高版本对 `PCM/WAVE` 支持范围是 `8` 位和 `16` 位线性 PCM(比特率最高可达到硬件上限)。以 8000、16000 和 44100 Hz 录制原始 PCM 所需的采样率。
### uni.createInnerAudioContext()
创建并返回内部 audio 上下文 `innerAudioContext` 对象。
**平台差异说明**
|App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|√|√|√|1.23.4+|√|√|√|√|√|
**innerAudioContext 对象的属性列表**
|属性|类型|说明|只读|平台差异说明|
|:-|:-|:-|:-|:-|
|src|String|音频的数据链接,用于直接播放。|否|微信小程序不支持本地路径|
|startTime|Number|开始播放的位置(单位:s),默认 0|否||
|autoplay|Boolean|是否自动开始播放,默认 false|否|H5端部分浏览器不支持|
|loop|Boolean|是否循环播放,默认 false|否||
|obeyMuteSwitch|Boolean|是否遵循系统静音开关,当此参数为 false 时,即使用户打开了静音开关,也能继续发出声音,默认值 true|否|微信小程序、百度小程序、抖音小程序、飞书小程序、京东小程序、快手小程序(仅在 iOS 上生效)|
|duration|Number|当前音频的长度(单位:s),只有在当前有合法的 src 时返回,需要在onCanplay中获取|是||
|currentTime|Number|当前音频的播放位置(单位:s),只有在当前有合法的 src 时返回,时间不取整,保留小数点后 6 位|是||
|paused|Boolean|当前是是否暂停或停止状态,true 表示暂停或停止,false 表示正在播放|是||
|buffered|Number|音频缓冲的时间点,仅保证当前播放时间点到此时间点内容已缓冲。|是||
|volume|Number|音量。范围 0~1。|否|&nbsp;|
|sessionCategory|String|设置音频播放模式,可取值:"ambient" - 不中止其他声音播放,不能后台播放,静音后无声音; "soloAmbient" - 中止其他声音播放,不能后台播放,静音后无声音; "playback" - 中止其他声音,可以后台播放,静音后有声音。 默认值为"playback"。|否|App 3.3.7+|
|playbackRate|Number|播放的倍率。可取值:0.5/0.8/1.0/1.25/1.5/2.0,默认值为1.0|否|App 3.4.5+(Android 需要 6 及以上版本)、微信小程序 2.11.0、支付宝小程序、抖音小程序 2.33.0+、快手小程序、百度小程序 3.120.2+|
**innerAudioContext 对象的方法列表**
|方法|参数|说明|平台差异说明|
|:-|:-|:-|:-|
|play||播放(H5端部分浏览器需在用户交互时进行)||
|pause||暂停||
|stop||停止||
|seek|position|跳转到指定位置,单位 s||
|destroy||销毁当前实例||
|onCanplay|callback|音频进入可以播放状态,但不保证后面可以流畅播放||
|onPlay|callback|音频播放事件||
|onPause|callback|音频暂停事件||
|onStop|callback|音频停止事件||
|onEnded|callback|音频自然播放结束事件||
|onTimeUpdate|callback|音频播放进度更新事件||
|onError|callback|音频播放错误事件||
|onWaiting|callback|音频加载中事件,当音频因为数据不足,需要停下来加载时会触发||
|onSeeking|callback|音频进行 seek 操作事件||
|onSeeked|callback|音频完成 seek 操作事件||
|offCanplay|callback|取消监听 onCanplay 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offPlay|callback|取消监听 onPlay 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offPause|callback|取消监听 onPause 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offStop|callback|取消监听 onStop 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offEnded|callback|取消监听 onEnded 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offTimeUpdate|callback|取消监听 onTimeUpdate 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offError|callback|取消监听 onError 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offWaiting|callback|取消监听 onWaiting 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offSeeking|callback|取消监听 onSeeking 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
|offSeeked|callback|取消监听 onSeeked 事件|微信小程序1.9.0+,支付宝小程序,抖音小程序、百度小程序|
errCode 说明
|errCode|说明|
|:-|:-|
|10001|系统错误|
|10002|网络错误|
|10003|文件错误|
|10004|格式错误|
|-1|未知错误|
**支持格式**
|格式|iOS|Android|
|:-|:-|:-|
|flac |x|√|
|m4a |√|√|
|ogg |x|√|
|ape |x|√|
|amr |x|√|
|wma |x|√|
|wav |√|√|
|mp3 |√|√|
|mp4 |x|√|
|aac |√|√|
|aiff |√|x|
|caf |√|x|
**示例**
```javascript
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
innerAudioContext.src = 'https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-hello-uniapp/2cc220e0-c27a-11ea-9dfb-6da8e309e0d8.mp3';
innerAudioContext.onPlay(() => {
console.log('开始播放');
});
innerAudioContext.onError((res) => {
console.log(res.errMsg);
console.log(res.errCode);
});
**当出现-99错误时** 可以按照下面思路进行排查
```javascript
// 多次会调用播放新的文件时,提前销毁实例,可避免-99错误
if (innerAudioContext) {
try {
innerAudioContext.pause();
innerAudioContext.destroy()
innerAudioContext = null
} catch (e) {
//TODO handle the exception
}
}
```
**tips**
- 如需音频的倍速播放,可通过video的倍速播放替代实现。插件市场有封装好的插件[音频倍速播放](https://ext.dcloud.net.cn/search?q=%E9%9F%B3%E9%A2%91%E5%80%8D%E9%80%9F%E6%92%AD%E6%94%BE)
- 如果需要带ui的音频播放器样式,可以在插件市场搜索相关[插件](https://ext.dcloud.net.cn/search?q=audio)
- `Android 4.1` 及更高版本对 `PCM/WAVE` 支持范围是 `8` 位和 `16` 位线性 PCM(比特率最高可达到硬件上限)。以 8000、16000 和 44100 Hz 录制原始 PCM 所需的采样率。
......@@ -36,7 +36,8 @@ App端如需要更丰富的相机拍照API(如直接调用前置摄像头)
- App端如需选择非媒体文件,可在插件市场搜索[文件选择](https://ext.dcloud.net.cn/search?q=文件选择),其中Android端可以使用Native.js,无需原生插件,而iOS端需要原生插件。
- 选择照片大多为了上传,uni ui封装了更完善的[uni-file-picker组件](https://ext.dcloud.net.cn/plugin?id=4079),文件选择、上传到uniCloud的免费存储和cdn中,一站式集成。强烈推荐使用。
- App上有时会遇到图片旋转90度问题,插件市场有解决方案:[图片旋转](https://ext.dcloud.net.cn/search?q=%E5%9B%BE%E7%89%87%E6%97%8B%E8%BD%AC)
- 微信小程序在2023年10月17日之后,使用API需要配置[隐私协议](https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html)
- 在部分低端机如红米上拍照闪退,拍照调用的是系统相机,当系统内存不足,rom为了给相机activity分配内存而把app的主activity回收了。遇到此问题建议使用nvue页面并内嵌的[自定义相机](https://ext.dcloud.net.cn/search?q=%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9B%B8%E6%9C%BA&orderBy=Relevance)的原生或uts插件。相关分析报告[详见](https://ask.dcloud.net.cn/article/40877)
**注:文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 [uni.saveFile](api/file/file?id=savefile),在应用下次启动时才能访问得到。**
......@@ -257,6 +258,7 @@ uni.chooseImage({
- 可以通过用户授权API来判断用户是否给应用授予相册的访问权限[https://uniapp.dcloud.io/api/other/authorize](https://uniapp.dcloud.io/api/other/authorize)
- H5没有API可触发保存到相册行为,下载图片时浏览器会询问图片存放地址。
- 微信小程序在2023年10月17日之后,使用API需要配置[隐私协议](https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html)
**示例代码:**
......
......@@ -36,14 +36,15 @@
**注意:**
* sourceType 值在 H5 平台根据浏览器的不同而表现不同,一般不可限制仅使用相册,部分浏览器也无法限制是否使用相机。
* app安卓端选择的视频最大只支持180MB,如需突破该限制请使用原生插件https://ext.dcloud.net.cn/search?q=%E6%96%87%E4%BB%B6%E9%80%89%E6%8B%A9
* app安卓端选择的视频最大只支持180MB,如需突破该限制请使用原生插件https://ext.dcloud.net.cn/search?q=%E6%96%87%E4%BB%B6%E9%80%89%E6%8B%A9
* 文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 [uni.saveFile](api/file/file?id=savefile),在应用下次启动时才能访问得到。
* camera 部分 Android 手机下由于系统 ROM 不支持无法生效,打开拍摄界面后可操作切换
* 可以通过用户授权API来判断用户是否给应用授予相册或摄像头的访问权限[https://uniapp.dcloud.io/api/other/authorize](https://uniapp.dcloud.io/api/other/authorize)
* App下如需进一步压缩视频大小,可以在插件市场搜索[视频压缩](http://ext.dcloud.net.cn/search?q=%E8%A7%86%E9%A2%91%E5%8E%8B%E7%BC%A9)插件
* 如需上传到cdn,可使用uniCloud.uploadFile API,uniCloud提供了免费cdn给开发者使用,详见[https://uniapp.dcloud.io/uniCloud/storage?id=uploadfile](https://uniapp.dcloud.io/uniCloud/storage?id=uploadfile)
* 如需上传到cdn,可使用uniCloud.uploadFile API,uniCloud提供了免费cdn给开发者使用,详见[https://doc.dcloud.net.cn/uniCloud/storage?id=uploadfile](https://doc.dcloud.net.cn/uniCloud/storage?id=uploadfile)
* 选择视频大多为了上传,uni ui封装了更完善的[uni-file-picker组件](https://ext.dcloud.net.cn/plugin?id=4079),文件选择、上传到uniCloud的免费存储和cdn中,一站式集成。强烈推荐使用。
* 部分浏览器中无法获取视频信息。
* 微信小程序在2023年10月17日之后,使用API需要配置[隐私协议](https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html)
**示例**
......@@ -170,9 +171,10 @@ uni.chooseMedia({
**Tips**
* 如需上传到cdn,可使用uniCloud.uploadFile API,uniCloud提供了免费cdn给开发者使用,详见[https://uniapp.dcloud.io/uniCloud/storage?id=uploadfile](https://uniapp.dcloud.io/uniCloud/storage?id=uploadfile)
* 如需上传到cdn,可使用uniCloud.uploadFile API,uniCloud提供了免费cdn给开发者使用,详见[https://doc.dcloud.net.cn/uniCloud/storage?id=uploadfile](https://doc.dcloud.net.cn/uniCloud/storage?id=uploadfile)
* 选择文件大多为了上传,uni ui封装了更完善的[uni-file-picker组件](https://ext.dcloud.net.cn/plugin?id=4079),文件选择、上传到uniCloud的免费存储和cdn中,一站式集成。强烈推荐使用。
* 经开发者提醒,微信小程序ios真机可以选择的文件个数不能大于9,详见帖子[https://ask.dcloud.net.cn/question/115561](https://ask.dcloud.net.cn/question/115561)
* 微信小程序在2023年10月17日之后,使用API需要配置[隐私协议](https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html)
### uni.saveVideoToPhotosAlbum(OBJECT)
......@@ -228,7 +230,7 @@ export default {
sourceType: ['camera'],
success: function (res) {
self.src = res.tempFilePath;
uni.saveVideoToPhotosAlbum({
filePath: res.tempFilePath,
success: function () {
......@@ -242,6 +244,10 @@ export default {
}
```
**Tips**
* 微信小程序在2023年10月17日之后,使用API需要配置[隐私协议](https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html)
### uni.getVideoInfo(OBJECT)
获取视频详细信息
......@@ -301,7 +307,7 @@ export default {
App端有很多插件支持视频压缩,详见[插件市场](https://ext.dcloud.net.cn/search?q=%E8%A7%86%E9%A2%91%E5%8E%8B%E7%BC%A9)
压缩完毕后如需上传到cdn,可使用uniCloud.uploadFile API,uniCloud提供了免费cdn给开发者使用,详见[https://uniapp.dcloud.io/uniCloud/storage?id=uploadfile](https://uniapp.dcloud.io/uniCloud/storage?id=uploadfile)
压缩完毕后如需上传到cdn,可使用uniCloud.uploadFile API,uniCloud提供了免费cdn给开发者使用,详见[https://doc.dcloud.net.cn/uniCloud/storage?id=uploadfile](https://doc.dcloud.net.cn/uniCloud/storage?id=uploadfile)
**OBJECT 参数说明**
......
实人认证提供核验终端操作者的真实身份,包含活体检测和人脸对比等生物识别技术,可快速校验自然人的真实身份。
App平台端详细文档需另见:[业务介绍](/uniCloud/frv/intro.md)[开发指南](/uniCloud/frv/dev.md)
微信小程序端业务开发流程,请参考[微信人脸核身接口能力](https://developers.weixin.qq.com/community/business/doc/000442d352c1202bd498ecb105c00d)
App平台端详细文档需另见:[业务介绍](https://doc.dcloud.net.cn/uniCloud/frv/intro.md)[开发指南](https://doc.dcloud.net.cn/uniCloud/frv/dev.html)
微信小程序端业务开发流程,请参考[微信人脸核身接口能力](https://developers.weixin.qq.com/community/business/doc/000442d352c1202bd498ecb105c00d)
### uni.getFacialRecognitionMetaInfo()
### uni.getFacialRecognitionMetaInfo()
uni.getFacialRecognitionMetaInfo是客户端API,获取实人认证设备信息,用于uniCloud云函数[getCertifyId](https://uniapp.dcloud.net.cn/uniCloud/frv/dev.html#get-certify-id)获取certifyId。
uni.getFacialRecognitionMetaInfo是客户端API,获取实人认证设备信息,用于uniCloud云函数[getCertifyId](https://doc.dcloud.net.cn/uniCloud/frv/dev.html#get-certify-id)获取certifyId。
App端API规范参考:[详情](/uniCloud/frv/dev.md#get-meta-info)
App端API规范参考:[详情](https://doc.dcloud.net.cn/uniCloud/frv/dev.html#get-meta-info)
**平台说明**
......@@ -16,12 +16,12 @@ App端API规范参考:[详情](/uniCloud/frv/dev.md#get-meta-info)
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|√(3.7.4+)|x|x|x|x|x|x|x|x|
### uni.startFacialRecognitionVerify(OBJECT)
实人认证
### uni.startFacialRecognitionVerify(OBJECT)
实人认证
uni.startFacialRecognitionVerify是客户端API,在App端打开刷脸认证界面。
uni.startFacialRecognitionVerify是客户端API,在App端打开刷脸认证界面。
App端API规范参考:[详情](/uniCloud/frv/dev.md#start-frv)
App端API规范参考:[详情](https://doc.dcloud.net.cn/uniCloud/frv/dev.html#start-frv)
**平台说明**
......
......@@ -3,7 +3,7 @@
uni.login是一个客户端API,统一封装了各个平台的各种常见的登录方式,包括App手机号一键登陆、三方登录(微信、微博、QQ、Apple、google、facebook)、各家小程序内置登录。
除了前端API,DCloud还提供了[uni-id](/uniCloud/uni-id-summary.md),这是一个云端一体的、完整的、账户开源框架。不仅包括客户端API,还包括前端页面、服务器代码、管理后台等所有与登录账户有关的服务,包括短信验证码、密码加密存储、忘记密码、头像更新等所有常见账户相关功能。
除了前端API,DCloud还提供了[uni-id](https://doc.dcloud.net.cn/uniCloud/uni-id/summary.html),这是一个云端一体的、完整的、账户开源框架。不仅包括客户端API,还包括前端页面、服务器代码、管理后台等所有与登录账户有关的服务,包括短信验证码、密码加密存储、忘记密码、头像更新等所有常见账户相关功能。
**平台差异说明**
......@@ -32,7 +32,7 @@ uni.login是一个客户端API,统一封装了各个平台的各种常见的
* [京东小程序登录](https://mp-docs.jd.com/api/openInterface/login.html)
#### web平台支持的登录方式
Web平台常见的登录包括用户名密码、短信验证码、pc端微信扫描、微信公众号登录。这些没有封装在 uni.login API中,但都封装在了uni-id中。请另行参考[uni-id](/uniCloud/uni-id-summary.md)
Web平台常见的登录包括用户名密码、短信验证码、pc端微信扫描、微信公众号登录。这些没有封装在 uni.login API中,但都封装在了uni-id中。请另行参考[uni-id](https://doc.dcloud.net.cn/uniCloud/uni-id/summary.html)
如不使用uni-id,微信内嵌浏览器运行H5版时,可通过js sdk实现微信登录,需要引入一个单独的js,[详见](https://ask.dcloud.net.cn/article/35380)
......@@ -135,6 +135,7 @@ uni.login({
**注意:**
- 微信小程序端,在用户未授权过的情况下调用此接口,不会出现授权弹窗,会直接进入 fail 回调(详见[《微信小程序公告》](https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01))。在用户已授权的情况下调用此接口,可成功获取用户信息。
- 京东小程序端,在用户未授权,调用该接口将直接报错。用户已经授权过,可使用该接口直接获取用户信息,不会弹二次授权框
- 抖音小程序此接口将逐步废弃,请切换使用[uni.getUserProfile](#getUserProfile)[详见](https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/open-interface/user-information/tt-get-user-info)
**OBJECT 参数说明**
......@@ -221,7 +222,7 @@ uni.login({
3. 开发原生插件集成三方sdk,[详见](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html)
### uni.getUserProfile(OBJECT)
### uni.getUserProfile(OBJECT)@getUserProfile
> 微信小程序端基础库2.27.1及以上版本,**[wx.getUserProfile 接口](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html)被收回**,详见[《小程序用户头像昵称获取规则调整公告》](https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01)。
......@@ -231,9 +232,9 @@ uni.login({
|App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序、飞书小程序|QQ小程序|快手小程序|京东小程序|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|x|x|√(基础库2.10.4)|x|x|x|x|x|x|
|x|x|√(基础库2.10.4)|x|x|√(基础库2.30.0)|x|x|x|
**注意:**
**注意:**
- 如业务需获取用户头像昵称,可以使用[「头像昵称填写能力」](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html)(基础库 2.21.2 版本开始支持,覆盖iOS与安卓微信 8.0.16 以上版本)。
- 该API仅支持微信小程序端(基础库2.10.4-2.27.0版本),微信小程序调整了相关接口(详见[《小程序登录、用户信息相关接口调整说明》](https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801?highLine=getUserProfile%253Afail))。每次触发 uni.getUserProfile 均会弹出授权窗口,用户授权后可成功获取用户信息。该API暂不支持在事件中使用异步操作,否则会触发错误:{errMsg: "getUserProfile:fail can only be invoked by user TAP gesture."}
......
......@@ -30,15 +30,15 @@
|:-|:-|:-|
|errMsg|String| 错误描述|
常见报错:
`getPushClientId:fail register fail: {\"errorCode\":1,\"errorMsg\":\"\"}`
请检查:
常见报错:
`getPushClientId:fail register fail: {\"errorCode\":1,\"errorMsg\":\"\"}`
请检查:
1. 当前应用是否已开通uni-push2.0 [详情参考](https://uniapp.dcloud.io/unipush-v2.html#%E7%AC%AC%E4%B8%80%E6%AD%A5-%E5%BC%80%E9%80%9A)
2. 客户端对应平台是否已启用uni-push2.0[详情参考](https://uniapp.dcloud.io/unipush-v2.html#%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%90%AF%E7%94%A8unipush2-0)
3. HBuilderX3.5.1 App平台vue3项目首次启动调用uni.getPushClientId 存在可能获取不到cid的问题,HBuilderX3.5.2修复了此问题,请升级。
示例代码:
```js
```js
uni.getPushClientId({
success: (res) => {
console.log(res.cid);
......@@ -53,7 +53,7 @@
### uni.onPushMessage(callback)@onPushMessage
启动监听推送消息事件
代码示例:
```js
```js
uni.onPushMessage((res)=>{
console.log(res)
})
......@@ -103,7 +103,7 @@ uni.offPushMessage(callback);
|when |Date |否 |消息上显示的提示时间</br>默认为当前时间,如果延迟显示则使用延时后显示消息的时间。</br>Android - ALL (支持)</br>iOS - 5.0+ (不支持): 不支持设定消息的显示时间,由系统自动管理消息的创建时间。 |
|success |Function |否 |接口调用成功的回调函数 |
|fail |Function |否 |接口调用失败的回调函数 |
|complete |Function |否 |接口调用结束的回调函数(调用成功、失败都会执行)
|complete |Function |否 |接口调用结束的回调函数(调用成功、失败都会执行)
**其他相关资源**
......@@ -132,4 +132,4 @@ QQ小程序订阅消息文档:[https://q.qq.com/wiki/develop/miniprogram/frame
华为快应用推送文档:[https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/webview-api-hwpush](https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/webview-api-hwpush)
## 服务端API [详情参考](/uniCloud/uni-cloud-push/api)
## 服务端API [详情参考](https://doc.dcloud.net.cn/uniCloud/uni-cloud-push/api)
......@@ -435,7 +435,7 @@ export default {
|属性 |类型 |必填 |说明 |平台差异说明 |
|:- |:- |:- |:- |:- |
|withShareTicket|Boolean |否 |是否使用带 shareTicket 的转发,默认为 flase。[详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html)|微信小程序 |
|withShareTicket|Boolean |否 |是否使用带 shareTicket 的转发,默认为 false。[详情](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html)|微信小程序 |
|title |String |否 |分享标题 |百度小程序 |
|content |String |否 |分享内容 |百度小程序 |
|imageUrl |String |否 |分享图标 |百度小程序 |
......
此差异已折叠。
### uni.connectSocket(OBJECT)
创建一个 [WebSocket](https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket) 连接。
> 在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。
**OBJECT 参数说明**
|参数名|类型|必填|说明|平台差异说明|
|:-|:-|:-|:-|:-|
|url|String|是|服务器接口地址|小程序中必须是 `wss://` 协议|
|multiple|Boolean|否|是否多实例。传入 true 时,将返回一个包含 SocketTask 实例。|仅支付宝小程序支持|
|header|Object|否|HTTP Header , header 中不能设置 Referer|小程序、App 2.9.6+|
|method|String|否|默认是GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT|仅微信小程序支持|
|protocols|Array&lt;String&gt;|否|子协议数组|App、H5、微信小程序、百度小程序、抖音小程序、飞书小程序|
|success|Function|否|接口调用成功的回调函数||
|fail|Function|否|接口调用失败的回调函数||
|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)|&nbsp;|
**示例代码**
```javascript
uni.connectSocket({
url: 'wss://www.example.com/socket',
header: {
'content-type': 'application/json'
},
protocols: ['protocol1'],
method: 'GET'
});
```
**返回值**
如果希望返回一个 [socketTask](/api/request/socket-task) 对象,需要至少传入 success / fail / complete 参数中的一个。例如:
```javascript
var socketTask = uni.connectSocket({
url: 'wss://www.example.com/socket', //仅为示例,并非真实接口地址。
complete: ()=> {}
});
```
如果没有传入 success / fail / complete 参数,则会返回封装后的 Promise 对象:[Promise 封装](/api/README?id=promise-%E5%B0%81%E8%A3%85)
**注意事项**
- 网络请求的 ``超时时间`` 可以统一在 ``manifest.json`` 中配置 [networkTimeout](/collocation/manifest?id=networktimeout)
- App平台,2.2.6以下的版本,不支持 ``ArrayBuffer`` 类型的数据收发。老版本不愿升级也可以使用 [plus-websocket插件](https://ext.dcloud.net.cn/plugin?id=647) 插件替代。
- App平台2.2.6以下的版本,所有 `vue` 页面只能使用一个 `websocket` 连接。App下可以使用 [plus-websocket](https://ext.dcloud.net.cn/plugin?id=647) 插件替代实现多连接。
- 微信小程序平台1.7.0 及以上版本,最多可以同时存在5个WebSocket 连接。老版本只支持一个socket连接。
- 百度小程序平台自基础库版本 1.9.4 及以后支持多个socket连接。老版本只支持一个socket连接。
- QQ小程序、支付宝小程序平台最多支持同时存在5个socket连接。
### uni.onSocketOpen(CALLBACK)
监听WebSocket连接打开事件。
**平台兼容性**
抖音小程序不支持
**CALLBACK 返回参数**
|属性|类型|说明|
|:-|:-|:-|
|header|Object|连接成功的 HTTP 响应 Header|
**示例代码:**
```javascript
uni.connectSocket({
url: 'wss://www.example.com/socket'
});
uni.onSocketOpen(function (res) {
console.log('WebSocket连接已打开!');
});
```
### uni.onSocketError(CALLBACK)
监听WebSocket错误。
**平台兼容性**
抖音小程序不支持
**示例代码**
```javascript
uni.connectSocket({
url: 'wss://www.example.com/socket'
});
uni.onSocketOpen(function (res) {
console.log('WebSocket连接已打开!');
});
uni.onSocketError(function (res) {
console.log('WebSocket连接打开失败,请检查!');
});
```
### uni.sendSocketMessage(OBJECT)
通过 WebSocket 连接发送数据,需要先 [uni.connectSocket](/api/request/websocket?id=connectsocket),并在 [uni.onSocketOpen](/api/request/websocket?id=onsocketopen) 回调之后才能发送。
**平台兼容性**
抖音小程序不支持
**OBJECT 参数说明:**
|参数名|类型|必填|说明|
|:-|:-|:-|:-|
|data|String/ArrayBuffer|是|需要发送的内容|
|success|Function|否|接口调用成功的回调函数|
|fail|Function|否|接口调用失败的回调函数|
|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)|
**示例代码**
```javascript
var socketOpen = false;
var socketMsgQueue = [];
uni.connectSocket({
url: 'wss://www.example.com/socket'
});
uni.onSocketOpen(function (res) {
socketOpen = true;
for (var i = 0; i < socketMsgQueue.length; i++) {
sendSocketMessage(socketMsgQueue[i]);
}
socketMsgQueue = [];
});
function sendSocketMessage(msg) {
if (socketOpen) {
uni.sendSocketMessage({
data: msg
});
} else {
socketMsgQueue.push(msg);
}
}
```
### uni.onSocketMessage(CALLBACK)
监听WebSocket接受到服务器的消息事件。
**平台兼容性**
抖音小程序不支持
**CALLBACK 返回参数**
|参数|类型|说明|
|:-|:-|:-|
|data|String/ArrayBuffer|服务器返回的消息|
**示例代码:**
```javascript
uni.connectSocket({
url: 'wss://www.example.com/socket'
});
uni.onSocketMessage(function (res) {
console.log('收到服务器内容:' + res.data);
});
```
### uni.closeSocket(OBJECT)
关闭 WebSocket 连接。
**平台兼容性**
抖音小程序不支持
**OBJECT 参数说明**
|参数名|类型|必填|说明|
|:-|:-|:-|:-|
|code|Number|否|一个数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是1000 (表示正常连接关闭)|
|reason|String|否|一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于123字节的UTF-8 文本(不是字符)|
|success|Function|否|接口调用成功的回调函数|
|fail|Function|否|接口调用失败的回调函数|
|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)|
### uni.onSocketClose(CALLBACK)
监听WebSocket关闭。
**平台兼容性**
抖音小程序不支持
```javascript
uni.connectSocket({
url: 'wss://www.example.com/socket'
});
// 注意这里有时序问题,
// 如果 uni.connectSocket 还没回调 uni.onSocketOpen,而先调用 uni.closeSocket,那么就做不到关闭 WebSocket 的目的。
// 必须在 WebSocket 打开期间调用 uni.closeSocket 才能关闭。
uni.onSocketOpen(function () {
uni.closeSocket();
});
uni.onSocketClose(function (res) {
console.log('WebSocket 已关闭!');
});
```
### uni.connectSocket(OBJECT)
创建一个 [WebSocket](https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket) 连接。
> 在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。
**OBJECT 参数说明**
|参数名|类型|必填|说明|平台差异说明|
|:-|:-|:-|:-|:-|
|url|String|是|服务器接口地址|小程序中必须是 `wss://` 协议|
|multiple|Boolean|否|是否多实例。传入 true 时,将返回一个包含 SocketTask 实例。|仅支付宝小程序支持|
|header|Object|否|HTTP Header , header 中不能设置 Referer|小程序、App 2.9.6+|
|method|String|否|默认是GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT|仅微信小程序支持|
|protocols|Array&lt;String&gt;|否|子协议数组|App、H5、微信小程序、百度小程序、抖音小程序、飞书小程序|
|success|Function|否|接口调用成功的回调函数||
|fail|Function|否|接口调用失败的回调函数||
|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)|&nbsp;|
**示例代码**
```javascript
uni.connectSocket({
url: 'wss://www.example.com/socket',
header: {
'content-type': 'application/json'
},
protocols: ['protocol1'],
method: 'GET'
});
```
**返回值**
如果希望返回一个 [socketTask](/api/request/socket-task) 对象,需要至少传入 success / fail / complete 参数中的一个。例如:
```javascript
var socketTask = uni.connectSocket({
url: 'wss://www.example.com/socket', //仅为示例,并非真实接口地址。
complete: ()=> {}
});
```
如果没有传入 success / fail / complete 参数,则会返回封装后的 Promise 对象:[Promise 封装](/api/README?id=promise-%E5%B0%81%E8%A3%85)
**注意事项**
- 网络请求的 ``超时时间`` 可以统一在 ``manifest.json`` 中配置 [networkTimeout](/collocation/manifest?id=networktimeout)
- App平台,2.2.6以下的版本,不支持 ``ArrayBuffer`` 类型的数据收发。老版本不愿升级也可以使用 [plus-websocket插件](https://ext.dcloud.net.cn/plugin?id=647) 插件替代。
- App平台2.2.6以下的版本,所有 `vue` 页面只能使用一个 `websocket` 连接。App下可以使用 [plus-websocket](https://ext.dcloud.net.cn/plugin?id=647) 插件替代实现多连接。
- 微信小程序平台1.7.0 及以上版本,最多可以同时存在5个WebSocket 连接。老版本只支持一个socket连接。
- 百度小程序平台自基础库版本 1.9.4 及以后支持多个socket连接。老版本只支持一个socket连接。
- QQ小程序、支付宝小程序平台最多支持同时存在5个socket连接。
- uni-push2.0在web、小程序以及APP的非离线模式下的底层实现都是基于一个socket。如果你的项目需要再次使用socket,请通过[socketTask](/api/request/socket-task)实现。
### uni.onSocketOpen(CALLBACK)
监听WebSocket连接打开事件。
**平台兼容性**
抖音小程序不支持
**CALLBACK 返回参数**
|属性|类型|说明|
|:-|:-|:-|
|header|Object|连接成功的 HTTP 响应 Header|
**示例代码:**
```javascript
uni.connectSocket({
url: 'wss://www.example.com/socket'
});
uni.onSocketOpen(function (res) {
console.log('WebSocket连接已打开!');
});
```
### uni.onSocketError(CALLBACK)
监听WebSocket错误。
**平台兼容性**
抖音小程序不支持
**示例代码**
```javascript
uni.connectSocket({
url: 'wss://www.example.com/socket'
});
uni.onSocketOpen(function (res) {
console.log('WebSocket连接已打开!');
});
uni.onSocketError(function (res) {
console.log('WebSocket连接打开失败,请检查!');
});
```
### uni.sendSocketMessage(OBJECT)
通过 WebSocket 连接发送数据,需要先 [uni.connectSocket](/api/request/websocket?id=connectsocket),并在 [uni.onSocketOpen](/api/request/websocket?id=onsocketopen) 回调之后才能发送。
**平台兼容性**
抖音小程序不支持
**OBJECT 参数说明:**
|参数名|类型|必填|说明|
|:-|:-|:-|:-|
|data|String/ArrayBuffer|是|需要发送的内容|
|success|Function|否|接口调用成功的回调函数|
|fail|Function|否|接口调用失败的回调函数|
|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)|
**示例代码**
```javascript
var socketOpen = false;
var socketMsgQueue = [];
uni.connectSocket({
url: 'wss://www.example.com/socket'
});
uni.onSocketOpen(function (res) {
socketOpen = true;
for (var i = 0; i < socketMsgQueue.length; i++) {
sendSocketMessage(socketMsgQueue[i]);
}
socketMsgQueue = [];
});
function sendSocketMessage(msg) {
if (socketOpen) {
uni.sendSocketMessage({
data: msg
});
} else {
socketMsgQueue.push(msg);
}
}
```
## 注意事项
* 出于性能的权衡,在Android端底层实现上发送队列占用的内存不能超过16M,一旦超过将导致连接被关闭。
### uni.onSocketMessage(CALLBACK)
监听WebSocket接受到服务器的消息事件。
**平台兼容性**
抖音小程序不支持
**CALLBACK 返回参数**
|参数|类型|说明|
|:-|:-|:-|
|data|String/ArrayBuffer|服务器返回的消息|
**示例代码:**
```javascript
uni.connectSocket({
url: 'wss://www.example.com/socket'
});
uni.onSocketMessage(function (res) {
console.log('收到服务器内容:' + res.data);
});
```
### uni.closeSocket(OBJECT)
关闭 WebSocket 连接。
**平台兼容性**
抖音小程序不支持
**OBJECT 参数说明**
|参数名|类型|必填|说明|
|:-|:-|:-|:-|
|code|Number|否|一个数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是1000 (表示正常连接关闭)|
|reason|String|否|一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于123字节的UTF-8 文本(不是字符)|
|success|Function|否|接口调用成功的回调函数|
|fail|Function|否|接口调用失败的回调函数|
|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)|
### uni.onSocketClose(CALLBACK)
监听WebSocket关闭。
**平台兼容性**
抖音小程序不支持
```javascript
uni.connectSocket({
url: 'wss://www.example.com/socket'
});
// 注意这里有时序问题,
// 如果 uni.connectSocket 还没回调 uni.onSocketOpen,而先调用 uni.closeSocket,那么就做不到关闭 WebSocket 的目的。
// 必须在 WebSocket 打开期间调用 uni.closeSocket 才能关闭。
uni.onSocketOpen(function () {
uni.closeSocket();
});
uni.onSocketClose(function (res) {
console.log('WebSocket 已关闭!');
});
```
......@@ -202,9 +202,9 @@ uni.switchTab({
|delta|Number|否|1|返回的页面数,如果 delta 大于现有页面数,则返回到首页。||
|animationType|String|否|pop-out|窗口关闭的动画效果,详见:[窗口动画](api/router?id=animation)|App(uni-app x 不支持)|
|animationDuration|Number|否|300|窗口关闭动画的持续时间,单位为 ms|App(uni-app x 不支持)|
|success|Function|否|接口调用成功的回调函数|
|fail|Function|否|接口调用失败的回调函数|
|complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)|
|success|Function|否||接口调用成功的回调函数||
|fail|Function|否||接口调用失败的回调函数||
|complete|Function|否||接口调用结束的回调函数(调用成功、失败都会执行)||
**示例**
......@@ -295,7 +295,7 @@ Tips:
* ``switchTab`` 只能打开 ``tabBar`` 页面。
* ``reLaunch`` 可以打开任意页面。
* 页面底部的 ``tabBar`` 由页面决定,即只要是定义为 ``tabBar`` 的页面,底部都有 ``tabBar``
* 不能在 ```App.vue``` 里面进行页面跳转。
* 不能在首页 ```onReady``` 之前进行页面跳转。
* H5端页面刷新之后页面栈会消失,此时`navigateBack`不能返回,如果一定要返回可以使用`history.back()`导航到浏览器的其他历史记录。
**参考事项**
......
......@@ -2,7 +2,7 @@
生物认证,包含手机的指纹识别、faceid两部分。即通过人体身体特征来进行身份认证识别。
如需要专业的活体检测、人脸识别、金融级实人认证,需另见文档[uni实人认证](/uniCloud/frv/intro.md)
如需要专业的活体检测、人脸识别、金融级实人认证,需另见文档[uni实人认证](https://doc.dcloud.net.cn/uniCloud/frv/intro.html)
### uni.startSoterAuthentication(OBJECT)
......@@ -35,7 +35,7 @@
注意:
- App端指纹识别,Android平台从Android6.0起才提供了官方API,uni-app也是从Android6起支持。对于更低版本的安卓,某些rom私有的指纹识别API,uni-app并不支持。
- App端人脸识别,iOS平台使用自带的faceID。Android平台需另行使用uni实人认证,另见[https://uniapp.dcloud.net.cn/uniCloud/frv/intro.html](/uniCloud/frv/intro.md)
- App端人脸识别,iOS平台使用自带的faceID。Android平台需另行使用uni实人认证,另见[https://doc.dcloud.net.cn/uniCloud/frv/intro.html](https://doc.dcloud.net.cn/uniCloud/frv/intro.html)
**OBJECT.success返回值说明**
......
......@@ -77,9 +77,9 @@ uni.scanCode({
**Tip**
- App的扫码引擎,使用业内开源的通用扫码库,识别效率比不过微信、支付宝等商业扫码库。如需更强的扫码效果,支付宝等原生语言扫码插件:[https://ext.dcloud.net.cn/search?q=%E6%89%AB%E7%A0%81&orderBy=Relevance&cat1=5&cat2=51](https://ext.dcloud.net.cn/search?q=%E6%89%AB%E7%A0%81&orderBy=Relevance&cat1=5&cat2=51),或uts插件:[https://ext.dcloud.net.cn/search?q=%E6%89%AB%E7%A0%81&orderBy=Relevance&cat1=8&cat2=81](https://ext.dcloud.net.cn/search?q=%E6%89%AB%E7%A0%81&orderBy=Relevance&cat1=8&cat2=81)
- App-vue如果想自定义扫码,可参考[uni-app中如何使用5+的原生界面控件](http://ask.dcloud.net.cn/article/35036)[plus.barcode API](https://www.html5plus.org/doc/zh_cn/barcode.html)
- App-nvue,支持barcode组件,可自定义扫码界面。[详见](https://uniapp.dcloud.io/component/barcode)。App端自定义扫码界面,建议使用nvue方式。
- App的扫码引擎,使用业内开源的通用扫码库,扫码效率比不过微信、支付宝等商业扫码库。如需更强的扫码效果,请使用支付宝提供的扫码插件:[https://ext.dcloud.net.cn/plugin?id=2636](https://ext.dcloud.net.cn/plugin?id=2636)
- 微信小程序自定义扫码界面,可使用camera组件。[详见](https://uniapp.dcloud.io/component/camera)
- 微信内嵌浏览器运行H5版时,可通过js sdk实现扫码,需要引入一个单独的js,[详见](https://ask.dcloud.net.cn/article/35380)
- 在扫码界面点击返回也会进入 `fail` 回调中
......
......@@ -6,7 +6,7 @@ uni-app提供了异步(`uni.getSystemInfo`)和同步(`uni.getSystemInfoSync`)的
按照运行环境层级排序,从底层向上,uni-app有6个概念:
- `device`:运行应用的设备,如iphone、huawei
- `os`:设备的操作系统,如 ios、andriod、windows、mac、linux
- `os`:设备的操作系统,如 ios、android、windows、mac、linux
- `rom`:基于操作系统的定制,Android系统特有概念,如miui、鸿蒙
- `host`:运行应用的宿主程序,即OS和应用之间的运行环境,如浏览器、微信等小程序宿主、集成uniMPSDK的App。uni-app直接开发的app没有host概念
- `uni`:uni-app框架相关的信息,如uni-app框架的编译器版本、运行时版本
......@@ -34,7 +34,7 @@ uni-app提供了异步(`uni.getSystemInfo`)和同步(`uni.getSystemInfoSync`)的
| |deviceOrientation |设备方向 |`竖屏 portrait``横屏 landscape`|`竖屏 portrait``横屏 landscape`|`竖屏 portrait``横屏 landscape`。仅微信百度小程序支持||uni-app 3.4.13+|
| |devicePixelRatio |设备像素比 || |||uni-app 3.4.13+|
|os |osName|系统名称|ios、android|ios、android、windows、macos、linux|ios、android、windows、macos||uni-app 3.4.10+|
| |osVersion |操作系统版本。如 ios 版本,andriod 版本|||||uni-app 3.4.10+|
| |osVersion |操作系统版本。如 ios 版本,android 版本|||||uni-app 3.4.10+|
| |osLanguage |操作系统语言[详见](#tips)|Android仅支持主语言+地区:`zh-CN 中文简体`、iOS支持主语言+次语言+地区`zh-Hans-CN 中文简体` |与浏览器语言一致 |不支持 | |uni-app 3.4.10+|
| |osTheme |操作系统主题 |light、dark。iOS平台只有将应用主题设置为跟随系统时才能获取到系统的主题|不支持 |不支持 ||uni-app 3.4.10+|
| |osAndroidAPILevel | Android 系统API库的版本。详情参考[Android 官方文档](https://developer.android.google.cn/guide/topics/manifest/uses-sdk-element?hl=en#ApiLevels)|`仅 Android 支持`|不支持|不支持||uni-app 3.4.10+|
......
# 定时器
## setTimeout(callback, delay, rest)
设定一个定时器。在定时到期以后执行注册的回调函数
......@@ -10,7 +12,6 @@
|delay|Number|否|延迟的时间,函数的调用会在该延迟之后发生,单位 ms|
|rest|Any|否|param1, param2, ..., paramN 等附加参数,它们会作为参数传递给回调函数|
**返回值**
|返回值|类型|说明|
......@@ -27,8 +28,41 @@
|:-|:-|:-|:-|
|timeoutID|Number|是|要取消的定时器的 ID|
### 最佳实践
定时器应当在组件、页面销毁时候取消,否则该定时器将成为游离定时器,无法被回收销毁。
```html
<script lang="ts">
let timer: ReturnType<typeof setTimeout> | null = null;
export default {
data() {
return {};
},
methods: {
onSetTimeout() {
timer = setTimeout(() => {
console.log("setTimeout");
}, 1000);
},
clearTimer() {
// clearTime
if (timer) {
clearTimeout(timer);
timer = null;
}
},
},
beforeUnmount() {
// clearTime
this.clearTimer();
},
};
</script>
```
## setInterval(callback, delay, rest)
设定一个定时器。按照指定的周期(以毫秒计)来执行注册的回调函数
**参数说明**
......@@ -39,7 +73,6 @@
|delay|Number|否|执行回调函数之间的时间间隔,单位 ms|
|rest|Any|否|param1, param2, ..., paramN 等附加参数,它们会作为参数传递给回调函数|
**返回值**
|返回值|类型|说明|
......@@ -47,9 +80,10 @@
|intervalID|Number|定时器的编号,这个值可以传递给 [clearInterval](/api/timer?id=clearinterval) 来取消该定时|
**代码示例**
```
```js
this.timer = setInterval(() => {
//TODO
//TODO
}, 1000);
```
......@@ -63,5 +97,38 @@ this.timer = setInterval(() => {
|:-|:-|:-|:-|
|intervalID|Number|是|要取消的定时器的 ID|
### 最佳实践
```html
<script lang="ts">
let timer: ReturnType<typeof setTimeout> | null = null;
export default {
data() {
return {};
},
methods: {
onSetTimeout() {
timer = setInterval(() => {
console.log("setInterval");
}, 1000);
},
clearTimer() {
// clearTime
if (timer) {
clearInterval(timer);
timer = null;
}
},
},
beforeUnmount() {
// clearTime
this.clearTimer();
},
};
</script>
```
## 注意事项
* App 端返回的定时器编号可能为 String 类型,使用时无需主动转换为 Number 类型
\ No newline at end of file
- App 端返回的定时器编号可能为 String 类型,使用时无需主动转换为 Number 类型
- 定时器执行间隔并不等于定时器间隔,受很多因素影响,这属于 JS 执行问题,详见 [MDN 文档](https://developer.mozilla.org/zh-CN/docs/Web/API/setInterval)
### uniCloud
### uniCloud
完整uniCloud客户端api列表请参考:[uniCloud客户端sdk](uniCloud/client-sdk.md)
完整uniCloud客户端api列表请参考:[uniCloud客户端sdk](https://doc.dcloud.net.cn/uniCloud/client-sdk.html)
......@@ -18,7 +18,7 @@ Tips:
* ``switchTab`` 只能打开 ``tabBar`` 页面。
* ``reLaunch`` 可以打开任意页面。
* 页面底部的 ``tabBar`` 由页面决定,即只要是定义为 ``tabBar`` 的页面,底部都有 ``tabBar``。
* 不能在 ```App.vue``` 里面进行页面跳转。
* 不能在首页 ```onReady``` 之前进行页面跳转。
### $getAppWebview()
......
......@@ -5,21 +5,23 @@ DCloud有**900万**开发者,[uni统计](https://tongji.dcloud.net.cn/)手机
## 官方示例
<a href="//m3w.cn/uniapp" target="_blank" class="clear-style"><b>Hello uni-app:</b></a>演示uni-app框架的组件、接口、模板。本项目源码可在HBuilderX中新建项目获得,也可从[github](https://github.com/dcloudio/hello-uniapp)上获取。
<div style="display:flex;justify-content: space-around;">
<a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
<img src="//img.cdn.aliyun.dcloud.net.cn/guide/uniapp/app_download.png" width="200"/>
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/case/app-download.png" width="200"/>
<span style="margin-top:15px;">App、H5、小程序通用快码</span>
</a>
<a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
<img src="//img.cdn.aliyun.dcloud.net.cn/guide/uniapp/gh_33446d7f7a26_430.jpg" width="200"/>
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/case/mp-weixin.jpg" width="200"/>
<span style="margin-top:15px;">微信小程序码</span>
</a>
</div>
<a href="//m3w.cn/__uni__1e99193" target="_blank" class="clear-style"><b>新闻/资讯类App模板:</b></a>nvue 典型案例,App端纯原生渲染,可左右拖动的复杂长列表,满足苛刻的性能要求。并同时能编译为小程序和H5。本项目源码在HBuilderX中新建项目选新闻模块可获得。
<div style="display:flex;justify-content: space-around;">
<a href="//m3w.cn/__uni__1e99193" target="_blank" class="clear-style barcode-view">
<img src="//img.cdn.aliyun.dcloud.net.cn/stream/qr/__UNI__1E99193.png/256" width="200"/>
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/case/news.png" width="200"/>
<span style="margin-top:15px;">App及H5的通用快码</span>
</a>
</div>
......@@ -94,6 +96,7 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目。
### 典型案例
<a href="https://m.qinxuan.hihonor.com/" target="_blank" class="clear-style"><b>华为荣耀亲选商城:</b></a> 华为公司旗下荣耀品牌精品电商平台。
<div style="display:flex;justify-content: space-around;">
<a href="javascript:;" target="_self" class="clear-style barcode-view">
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-case-rongyao.png" width="200"/>
......@@ -103,14 +106,17 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目。
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/rongyao.png" width="200"/>
<span style="margin-top:15px;">H5</span>
</a>
<a href="https://appgallery1.huawei.com/#/app/C100382765" target="_blank" class="clear-style barcode-view">
<!-- <a href="https://appgallery1.huawei.com/#/app/C100382765" target="_blank" class="clear-style barcode-view">
<img src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-alicdn/6933ea80-c55a-11ea-9dfb-6da8e309e0d8.png" width="200"/>
<span style="margin-top:15px;">App(部分栏目使用DCloud SDK)</span>
</a>
</a> -->
</div>
[App(部分栏目使用DCloud SDK)](https://os-android.liqucn.com/rj/1182416.shtml)
<b>星巴克:</b>全球最大的咖啡连锁店,世界领先的特种咖啡零售商
<div style="display:flex;justify-content: space-around;">
<a href="javascript:;" target="_self" class="clear-style barcode-view">
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-case-xbk.jpg" width="200"/>
......@@ -119,18 +125,21 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目。
</div>
<b>Crimaster犯罪大师:</b>火爆的全球推理侦探专属社区。优秀App案例,Appstore娱乐分类排名曾排**第1位**[详见报道](https://baijiahao.baidu.com/s?id=1667788917828125742&wfr=spider&for=pc)
<div style="display:flex;justify-content: space-around;">
<a href="https://android.myapp.com/myapp/detail.htm?apkName=com.ultron.crimaster" target="_blank" class="clear-style barcode-view">
<img src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-alicdn/83bc24b0-c55c-11ea-b244-a9f5e5565f30.png" width="200"/>
<a href="https://sj.qq.com/appdetail/com.ultron.crimaster" target="_blank" class="clear-style barcode-view">
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/case/crimaster-android.png" width="200"/>
<span style="margin-top:15px;">Android App版</span>
</a>
<a href="https://apps.apple.com/cn/app/crimaster%E7%8A%AF%E7%BD%AA%E5%A4%A7%E5%B8%88/id1501701702" target="_blank" class="clear-style barcode-view">
<img src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-alicdn/83bbd690-c55c-11ea-8bd0-2998ac5bbf7e.png" width="200"/>
<a href="https://apps.apple.com/cn/app/crimaster%E4%BE%A6%E6%8E%A2%E8%81%94%E7%9B%9F/id1501701702" target="_blank" class="clear-style barcode-view">
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/case/crimaster-ios.png" width="200"/>
<span style="margin-top:15px;">iOS App版</span>
</a>
</div>
<b>中国教育发布:</b>中华人民共和国教育部官方App。<a href="https://uniapp.dcloud.io/uniCloud/README">uniCloud云开发</a>案例。[详见报道](http://www.moe.gov.cn/jyb_xwfb/gzdt_gzdt/s5987/202009/t20200904_485105.html)
<div style="display:flex;justify-content: space-around;">
<a href="http://www.moe.gov.cn/jyb_xwfb/gzdt_gzdt/s5987/202009/t20200904_485105.html" target="_blank" class="clear-style barcode-view">
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/jiaoyubuapp.jpg" width="200"/>
......@@ -139,6 +148,7 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目。
</div>
<b>CSDN:</b> Appstore新闻类榜单前十。<a href="https://nativesupport.dcloud.net.cn/">uni小程序SDK</a>案例。App内部众多栏目做成小程序形式。
<div style="display:flex;justify-content: space-around;">
<a href="https://www.csdn.net/apps/download" target="_blank" class="clear-style barcode-view">
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/csdnappdown.jpg" width="200"/>
......@@ -169,18 +179,19 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目。
-->
<b>vivo官方商城:</b> vivo公司旗下的官方自营商城。
<div style="display:flex;justify-content: space-around;">
<a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
<img src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/vivo-weixin.jpg" width="200"/>
<a href="javascript:;" target="_blank" class="clear-style barcode-view">
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/case/vivo-weixin.jpg" width="200"/>
<span style="margin-top:15px;">微信小程序码</span>
</a>
<a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
<img src="https://img.cdn.aliyun.dcloud.net.cn/uni-app/case/vivo-mall.png" width="200"/>
<a href="javascript:;" target="_blank" class="clear-style barcode-view">
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/case/vivo-mall.png" width="200"/>
<span style="margin-top:15px;">支付宝小程序码</span>
</a>
</div>
<!-- <a href="https://duolingo.91ddedu.com/" target="_blank" class="clear-style"><b>登登多邻国:</b></a> 外语学习者题库。其服务端整体基于[uniCloud](https://uniapp.dcloud.net.cn/uniCloud/README),前端包括PC和H5网站、微信小程序,均连接uniCloud。日请求量百万级。
<!-- <a href="https://duolingo.91ddedu.com/" target="_blank" class="clear-style"><b>登登多邻国:</b></a> 外语学习者题库。其服务端整体基于[uniCloud](https://doc.dcloud.net.cn/uniCloud/README),前端包括PC和H5网站、微信小程序,均连接uniCloud。日请求量百万级。
<div style="display:flex;justify-content: space-around;">
<a href="https://duolingo.91ddedu.com/" target="_blank" class="clear-style barcode-view">
<img src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-alicdn/bda036a0-c55f-11ea-b997-9918a5dda011.png" width="200"/>
......@@ -193,6 +204,7 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目。
</div> -->
<a href="http://ext.dcloud.net.cn/plugin?id=239" target="_blank" class="clear-style"><b>ColorUI:</b></a>ColorUI官方组件库for uni-app,高颜值示例。本项目插件市场地址:[https://ext.dcloud.net.cn/plugin?id=239](https://ext.dcloud.net.cn/plugin?id=239)
<div style="display:flex;justify-content: space-around;">
<a href="http://demo.color-ui.com" target="_blank" class="clear-style barcode-view">
<img src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/color-ui-H5.jpg" width="200"/>
......@@ -209,6 +221,7 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目。
</div>
<a href="https://www.cyb520.com/" target="_blank" class="clear-style"><b>宠友帮:</b></a>多端开发的创业公司案例。
<div style="display:flex;justify-content: space-around;">
<!-- <a href="https://android.myapp.com/myapp/detail.htm?apkName=com.cyb520.app" target="_blank" class="clear-style barcode-view">
<img src="https://a.app.qq.com/o/image/microQr.png?pkgName=com.cyb520.app" width="200"/>
......@@ -643,6 +656,8 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目。
**西贝骑手:** 西贝莜面村外卖骑手App
**库迪咖啡:** 微信小程序搜索 “库迪咖啡”
**书亦烧仙草:** 微信小程序搜同名
**海尔智家:** 微信小程序搜同名
......
......@@ -14,8 +14,8 @@
|函数名|说明|平台兼容|
|:-|:-|:-|
|onLaunch|当``uni-app`` 初始化完成时触发(全局只触发一次)||
|onShow|当 ``uni-app`` 启动,或从后台进入前台显示||
|onLaunch|当``uni-app`` 初始化完成时触发(全局只触发一次),参数为应用启动参数,同 [uni.getLaunchOptionsSync](https://uniapp.dcloud.net.cn/api/getLaunchOptionsSync.html#getlaunchoptionssync) 的返回值||
|onShow|当 ``uni-app`` 启动,或从后台进入前台显示,参数为应用启动参数,同 [uni.getLaunchOptionsSync](https://uniapp.dcloud.net.cn/api/getLaunchOptionsSync.html#getlaunchoptionssync) 的返回值||
|onHide|当 ``uni-app`` 从前台进入后台||
|onError|当 ``uni-app`` 报错时触发|app-uvue 不支持|
|onUniNViewMessage|对 ``nvue`` 页面发送的数据进行监听,可参考 [nvue 向 vue 通讯](https://uniapp.dcloud.io/tutorial/nvue-api?id=communication)|app-uvue 不支持|
......@@ -30,11 +30,13 @@
<script>
// 只能在App.vue里监听应用的生命周期
export default {
onLaunch: function() {
onLaunch: function(options) {
console.log('App Launch')
console.log('应用启动路径:', options.path)
},
onShow: function() {
onShow: function(options) {
console.log('App Show')
console.log('应用启动路径:', options.path)
},
onHide: function() {
console.log('App Hide')
......@@ -53,7 +55,7 @@
## globalData
小程序有globalData,这是一种简单的全局变量机制。这套机制在uni-app里也可以使用,并且全端通用(uni-app x不支持)
小程序有globalData,这是一种简单的全局变量机制。这套机制在uni-app里也可以使用,并且全端通用。
当然vue框架的全局变量,另有其他方式定义。
......
......@@ -5,8 +5,8 @@
`main.js`主要作用是初始化`vue`实例、定义全局组件、使用需要的插件如 i18n、vuex。
首先引入了`Vue`库和`App.vue`,创建了一个`vue`实例,并且挂载`vue`实例。
> uni-app Vue2
::: preview
> uni-app(Vue2)
```js
import Vue from 'vue'
......@@ -24,9 +24,9 @@ app.$mount() //挂载 Vue 实例
```
> uni-app Vue3
> uni-app(Vue3)
```JS
```js
import App from './App'
import { createSSRApp } from 'vue'
import PageHead from './components/page-head.vue' //全局引用 page-head 组件
......@@ -41,7 +41,7 @@ export function createApp() {
}
```
> uni-app x 的 main.uts
> uni-app x(main.uts)
```ts
import App from './App'
......@@ -57,6 +57,7 @@ export function createApp() {
}
}
```
:::
一般情况下,使用easycom比全局组件更常用,easycom按需应用更节省资源。
......
......@@ -21,10 +21,10 @@ App-Android平台云端打包相关配置
|locale|String|应用的默认语言|
|forceDarkAllowed|Boolean|是否强制允许暗黑模式|
|resizeableActivity|Boolean|是否支持分屏调整窗口大小|
|hasTaskAffinity|Boolean|是否设置android:taskAffinity|
|hasTaskAffinity|Boolean|是否设置android:taskAffinity[详见](https://uniapp.dcloud.net.cn/tutorial/app-sec-android.html#strandhogg%E6%BC%8F%E6%B4%9E)|
|buildFeatures|Object|Android平台云端打包时build.gradle的buildFeatures配置项,[详见](/collocation/manifest?id=buildFeatures)|
|pushRegisterMode|String|延迟初始化UniPush的配置,当配置此项值为`manual`后UniPush不会初始化,直到首次调用[getPushClientId](https://uniapp.dcloud.net.cn/api/plugins/push.html#getpushclientid)、getClientInfo、getClientInfoAsync时才会初始化,注:一旦调用获取cid的方法后,下次App启动就不再延迟初始化UniPush了。(manual为延迟,其他值表示不延迟。)|
|enableOAID|Boolean|是否支持获取OAID,默认值为true,[详见](/collocation/manifest?id=enableOAID)|
|enableOAID|Boolean|是否支持获取OAID,默认值为true,[详见](#enableOAID)|
#### buildFeatures@buildFeatures
Android平台云端打包时build.gradle的buildFeatures配置项,支持的属性参考:[Android官方文档](https://developer.android.google.cn/reference/tools/gradle-api/7.1/com/android/build/api/dsl/BuildFeatures?hl=en),如下示例源码:
......
......@@ -161,7 +161,7 @@ alwaysShowBeforeRender和autoclose属性组合设置,可配置以下三种关
|属性|类型|说明|
|:-|:-|:-|
|subPackages|Boolean|是否开启分包优化|
|subPackages|Boolean|是否开启分包优化,目前仅 uni-app vue2 下生效|
```
"app-plus": {
......@@ -379,11 +379,17 @@ Tips:`uni-app` 中 `manifest.json->h5->devServer`,`vue2` 实际上对应 `we
"securityJsCode": "",
// 高德地图安全密钥代理服务器地址(HBuilderX 3.6.0+)https://lbs.amap.com/api/jsapi-v2/guide/abc/prepare
"serviceHost": "",
},
"bmap": {
// 百度地图秘钥(HBuilderX 3.99+)http://lbsyun.baidu.com/apiconsole/key#/home
"key": ""
}
}
}
}
```
**注意**
- 百度地图 vue2 项目暂不支持
#### optimization
......@@ -422,7 +428,7 @@ Tips:关于摇树优化(treeShaking)原理及优化结果,参考:[http
|requiredBackgroundModes|Array|微信小程序需要在后台使用的能力,[详见](https://developers.weixin.qq.com/miniprogram/dev/framework/config.html#requiredbackgroundmodes)|
|plugins|Object|使用到的插件,[详见](https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/using.html)|
|resizable|Boolean|在iPad上小程序是否支持屏幕旋转,默认关闭|
|navigateToMiniProgramAppIdList|Array|需要跳转的小程序列表,[详见](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/miniprogram-navigate/wx.navigateToMiniProgram.html)|
|navigateToMiniProgramAppIdList|Array|需要跳转的小程序列表,[详见](https://developers.weixin.qq.com/minigame/dev/reference/configuration/app.html#navigateToMiniProgramAppIdList)|
|permission|Object|微信小程序接口权限相关设置,比如申请位置权限必须填此处[详见](https://developers.weixin.qq.com/miniprogram/dev/framework/config.html)|
|workers|String|Worker 代码放置的目录。 [详见](https://developers.weixin.qq.com/miniprogram/dev/framework/workers.html)|
|optimization|Object| 对微信小程序的优化配置 |
......@@ -503,6 +509,7 @@ Tips:关于摇树优化(treeShaking)原理及优化结果,参考:[http
|mergeVirtualHostAttributes|Boolean|合并组件[虚拟节点](/tutorial/vue-api.html#%E5%85%B6%E4%BB%96%E9%85%8D%E7%BD%AE)外层属性(目前仅支持 style、class 属性),uni-app 3.5.1+ 开始支持|
|slotMultipleInstance|Boolean|模拟单个作用域插槽渲染为多个实例,此配置仅限 Vue2 环境 3.7.12+,Vue3 环境已默认支持|
|lazyCodeLoading|String|是否开启代码按需执行。|
|styleIsolation|String|组件样式隔离方式,默认值为 `apply-shared`,具体配置 [详见](https://opendocs.alipay.com/mini/framework/page-acss)。 uni-app 3.99+ 开始支持|
### mp-baidu
......
......@@ -18,7 +18,7 @@
|[leftWindow](/collocation/pages?id=leftwindow)|Object|否|大屏左侧窗口|H5|
|[topWindow](/collocation/pages?id=topwindow)|Object|否|大屏顶部窗口|H5|
|[rightWindow](/collocation/pages?id=rightwindow)|Object|否|大屏右侧窗口|H5|
|[uniIdRouter](/uniCloud/uni-id-summary.md?id=uni-id-router)|Object|否|自动跳转相关配置,新增于HBuilderX 3.5.0|uni-app x 不支持|
|[uniIdRouter](https://doc.dcloud.net.cn/uniCloud/uni-id/summary.html#uni-id-router)|Object|否|自动跳转相关配置,新增于HBuilderX 3.5.0|uni-app x 不支持|
|entryPagePath|String|否|默认启动首页,新增于HBuilderX 3.7.0|微信小程序、支付宝小程序|
以下是一个包含了所有配置选项的 `pages.json`
......@@ -281,7 +281,8 @@ uni-app 2.9+ 新增 leftWindow, topWindow, rightWindow 配置。用于解决宽
|属性|类型|默认值|描述|
|:-|:-|:-|:-|
|path|String||配置页面路径|
|style|Object||配置页面窗口表现,配置项参考下方 [pageStyle](/collocation/pages?id=style)||
|style|Object||配置页面窗口表现,配置项参考下方 [pageStyle](/collocation/pages?id=style)|
|needLogin|Boolean|false|是否需要登录才可访问|
**Tips:**
......@@ -431,7 +432,7 @@ uni-app 2.9+ 新增 leftWindow, topWindow, rightWindow 配置。用于解决宽
|:-|:-|:-|:-|:-|
|background|HexColor|#FFFFFF|窗体背景色。无论vue页面还是nvue页面,在App上都有一个父级原生窗体,该窗体的背景色生效时间快于页面里的css生效时间|App (vue 页面需要将 body 背景色设为透明,uni-app x 不支持)|
|titleNView|Object||导航栏 ,详见:[导航栏](/collocation/pages?id=app-titleNView)|App(uni-app x 不支持)、H5|
|subNVues|Object||原生子窗体,详见:[原生子窗体](/collocation/pages?id=app-subNVues)|App 1.9.10+(uni-app x 不支持)|
|subNVues|Array||原生子窗体,详见:[原生子窗体](/collocation/pages?id=app-subNVues)|App 1.9.10+(uni-app x 不支持)|
|bounce|String||页面回弹效果,设置为 "none" 时关闭效果。|App-vue(nvue Android无页面级bounce效果,仅list、recycle-list、waterfall等滚动组件有bounce效果)|
|popGesture|String|close|侧滑返回功能,可选值:"close"(启用侧滑返回)、"none"(禁用侧滑返回)|App-iOS|
|softinputNavBar|String|auto|iOS软键盘上完成工具栏的显示模式,设置为 "none" 时关闭工具栏。|App-iOS|
......@@ -440,6 +441,7 @@ uni-app 2.9+ 新增 leftWindow, topWindow, rightWindow 配置。用于解决宽
|scrollIndicator|String||滚动条显示策略,设置为 "none" 时不显示滚动条。|App(uni-app x 不支持)|
|animationType|String|pop-in|窗口显示的动画效果,详见:[窗口动画](/api/router?id=animation)。|App(uni-app x 不支持)|
|animationDuration|Number|300|窗口显示动画的持续时间,单位为 ms。|App(uni-app x 不支持)|
**Tips**
- `.nvue` 页面仅支持 `titleNView、pullToRefresh、scrollIndicator` 配置,其它配置项暂不支持
......@@ -465,7 +467,7 @@ uni-app 2.9+ 新增 leftWindow, topWindow, rightWindow 配置。用于解决宽
|coverage|String|"132px"|标题栏控件变化作用范围,仅在type值为transparent时有效,页面滚动时标题栏背景透明度将发生变化。 当页面滚动到指定偏移量时标题栏背景变为完全不透明。 支持百分比、像素值||
|splitLine|Boolean |false|标题栏的底部分割线([SplitLineStyles](/collocation/pages?id=app-titleNView-splitLineStyles)),设置此属性则在标题栏控件的底部显示分割线,可配置颜色值及高度。 设置此属性值为undefined或null则隐藏分割线。 默认不显示底部分割线|2.6.6|
|subtitleColor|String||副标题文字颜色,颜色值格式为"#RRGGBB"和"rgba(R,G,B,A)",如"#FF0000"表示标题文字颜色为红色。 默认值与主标题文字颜色一致|2.6.6|
|subtitleSize|String|"auto"|副标题文字字体大小,字体大小单位为像素,如"14px"表示字体大小为14像素,默认值为12像素。|2.6.6|
|subtitleSize|String|"auto"|副标题文字字体大小,字体大小单位为像素,如"14px"表示字体大小为14像素,auto表示自动计算,约为12像素。|2.6.6|
|subtitleOverflow|String|"ellipsis"|标题文字超出显示区域时处理方式,可取值: "clip" - 超出显示区域时内容裁剪; "ellipsis" - 超出显示区域时尾部显示省略标记(...)。|2.6.6|
|subtitleText|String||副标题文字内容,设置副标后将显示两行标题,副标显示在主标题(titleText)下方。 注意:设置副标题后将居左显示|2.6.6|
|titleIcon|String||标题图标,图标路径如"./img/t.png",仅支持本地文件路径, 相对路径,相对于当前页面的host位置,固定宽高为逻辑像素值"34px"。 要求图片的宽高相同。 注意:设置标题图标后标题将居左显示。|2.6.6|
......@@ -501,7 +503,7 @@ uni-app 2.9+ 新增 leftWindow, topWindow, rightWindow 配置。用于解决宽
|fontWeight|String|normal|按钮上文字的粗细。可取值"normal"-标准字体、"bold"-加粗字体。|
|fontSize|String||按钮上文字大小|
|fontSrc|String||按钮上文字使用的字体文件路径。不支持网络地址,请统一使用本地地址。|
|select|String|false|是否显示选择指示图标(向下箭头),常用于城市选择|
|select|Boolean|false|是否显示选择指示图标(向下箭头),常用于城市选择|
|text|String||按钮上显示的文字。使用字体图标时 unicode 字符表示必须 '\u' 开头,如 "\ue123"(注意不能写成"\e123")。|
|width|String|44px|按钮的宽度,可取值: "*px" - 逻辑像素值,如"10px"表示10逻辑像素值,不支持rpx。按钮的内容居中显示; "auto" - 自定计算宽度,根据内容自动调整按钮宽度|
......@@ -854,7 +856,7 @@ h5 平台下拉刷新动画,只有 circle 类型。
|属性|类型|默认值|描述|
|:-|:-|:-|:-|
|allowsBounceVertical|String|YES|是否允许向下拉拽。支持 YES / NO|
|titleImage|String||导航栏图片地址(替换当前文字标题),必须使用https的图片链接地址|
|titleImage|String||导航栏图片地址(替换当前文字标题),必须使用https的图片链接地址|
|transparentTitle|String|none|导航栏透明设置。支持 always 一直透明 / auto 滑动自适应 / none 不透明|
|titlePenetrate|String|NO|导航栏点击穿透|
|showTitleLoading|String|NO|是否进入时显示导航栏的 loading。支持 YES / NO|
......@@ -927,7 +929,7 @@ h5 平台下拉刷新动画,只有 circle 类型。
<pre v-pre="" data-lang="">
<code class="lang-" style="padding:0">
┌─components
┌─components
│ └─comp-a
│ └─comp-a.vue 符合easycom规范的组件
└─uni_modules [uni_module](/uni_modules)中符合easycom规范的组件
......@@ -975,7 +977,10 @@ h5 平台下拉刷新动画,只有 circle 类型。
- 考虑到编译速度,直接在`pages.json`内修改`easycom`不会触发重新编译,需要改动页面内容触发。
- `easycom`只处理vue组件,不处理小程序专用组件(如微信的wxml格式组件)。不处理后缀为.nvue的组件。因为nvue页面引入的组件也是.vue组件。可以参考uni ui,使用vue后缀,同时兼容nvue页面。
- `nvue`页面里引用`.vue`后缀的组件,会按照nvue方式使用原生渲染,其中不支持的css会被忽略掉。这种情况同样支持`easycom`
- `vue``uvue` 组件优先级,[详见](/uni-app-x/component/README.md#priority)
- `vue``uvue` 组件优先级,[详见](https://doc.dcloud.net.cn/uni-app-x/component/README.html#priority)
### Bug & Tips@easycom_tips
+ HBuilderX 3.96 版本以下`uni-app x`项目,当页面文件名与`easycom`的组件名一样时,会渲染异常,可以通过调整页面文件名规避该Bug。
## tabBar
......@@ -1008,6 +1013,9 @@ h5 平台下拉刷新动画,只有 circle 类型。
|height|String|否|50px|tabBar 默认高度|App 2.3.4+、H5 3.0.0+|
|midButton|Object|否||中间按钮 仅在 list 项为偶数时有效|App 2.3.4+、H5 3.0.0+|
|iconfontSrc|String|否||list设置 iconfont 属性时,需要指定字体文件路径 |App 3.4.4+、H5 3.5.3+|
|backgroundImage|String|否||设置背景图片,优先级高于 backgroundColor |App|
|backgroundRepeat|String|否||设置标题栏的背景图平铺方式,可取值:"repeat" - 背景图片在垂直方向和水平方向平铺;"repeat-x" - 背景图片在水平方向平铺,垂直方向拉伸;"repeat-y" - 背景图片在垂直方向平铺,水平方向拉伸;"no-repeat" - 背景图片在垂直方向和水平方向都拉伸。 默认使用 "no-repeat"|App|
|redDotColor|String|否||tabbar上红点颜色|App|
其中 list 接收一个数组,数组中的每个项都是一个对象,其属性值如下:
......
此差异已折叠。
......@@ -56,7 +56,7 @@
* [微信小程序](component/ad-weixin.md)
* [微信小程序格子广告](component/ad-grid.md)
* [广告错误码](component/ad-error-code.md)
* [uniCloud-db云数据库](/uniCloud/unicloud-db.md)
* [uniCloud-db云数据库](https://doc.dcloud.net.cn/uniCloud/unicloud-db.html)
* [页面属性配置节点](component/page-meta.md)
* [page-meta](component/page-meta.md)
* [navigation-bar](component/navigation-bar.md)
......
......@@ -34,7 +34,7 @@ code|message|
4. 激励视频因为有奖励,很容易招惹灰黑产,为防止被刷,推荐使用:
- 1) 开通激励视频的服务器回调 [详情](ad-rewarded-video.md#callback)
- 2) 不使用短信验证码等不安全登录手段,改为[App一键登陆](../univerify.md)、uni金融级实人认证(含活体检测)等更安全的身份校验
- 3) 使用uni云端一体安全网络,防止伪造客户端 [详情](../uniCloud/secure-network.md)
- 3) 使用uni云端一体安全网络,防止伪造客户端 [详情](https://doc.dcloud.net.cn/uniCloud/secure-network.html)
#### 不治本的绕过型方案
......
......@@ -35,7 +35,7 @@ uni-ad内置了安全防护策略,减少广告被刷风险
3.6.8+ 支持激励视频服务器安全回调,[详情](https://uniapp.dcloud.net.cn/component/ad-rewarded-video.html#callback)
服务器回调用于业务系统判断是否提供奖励给观看广告的用户。配置服务器回调后,当用户成功看完广告时,[uniCloud](https://uniapp.dcloud.net.cn/uniCloud/)服务器会访问配置的云函数,通知用户完成观看激励视频。
服务器回调用于业务系统判断是否提供奖励给观看广告的用户。配置服务器回调后,当用户成功看完广告时,[uniCloud](https://doc.dcloud.net.cn/uniCloud/)服务器会访问配置的云函数,通知用户完成观看激励视频。
相对来讲服务器回调将更加安全
6. 开通方式
......
......@@ -126,7 +126,7 @@ open-type 为 feedback时:
button组件属性中的size和type,属于预置样式,方便开发者使用。开发者也可以通过style和class来自定义样式。
button虽然可以内嵌text组件,但不建议通过text组件来修改button样式,因为会导致hove-class不生效。尤其是uvue中样式不继承。建议直接在button组件的style或class属性编写样式。
button虽然可以内嵌text组件,但不建议通过text组件来修改button样式,因为会导致hover-class不生效。尤其是uvue中样式不继承。建议直接在button组件的style或class属性编写样式。
style和class的优先级,高于size和type属性。
......
......@@ -12,12 +12,17 @@
**属性说明**
|属性名|类型|默认值|说明|
|:-|:-|:-|:-|
|value|String||``<checkbox>`` 标识,选中时触发 ``<checkbox-group>`` 的 change 事件,并携带 ``<checkbox>`` 的 value。|
|disabled|Boolean|false|是否禁用|
|checked|Boolean|false|当前是否选中,可用来设置默认选中|
|color|Color||checkbox的颜色,同css的color|
|属性名|类型|默认值|说明|平台差异说明|
|:-|:-|:-|:-|:-|
|value|String||``<checkbox>`` 标识,选中时触发 ``<checkbox-group>`` 的 change 事件,并携带 ``<checkbox>`` 的 value。||
|disabled|Boolean|false|是否禁用||
|checked|Boolean|false|当前是否选中,可用来设置默认选中||
|color|Color||checkbox的颜色,同css的color||
|backgroundColor|Color|#ffffff|checkbox默认的背景颜色|H5(3.99+)、App-Vue(3.99+)|
|borderColor|Color|#d1d1d1|checkbox默认的边框颜色|H5(3.99+)、App-Vue(3.99+)|
|activeBackgroundColor|Color|#ffffff|checkbox选中时的背景颜色,优先级大于color属性|H5(3.99+)、App-Vue(3.99+)|
|activeBorderColor|Color|#d1d1d1|checkbox选中时的边框颜色|H5(3.99+)、App-Vue(3.99+)|
|iconColor|Color|#007aff|checkbox的图标颜色|H5(3.99+)、App-Vue(3.99+)|
**示例** [查看演示](https://hellouniapp.dcloud.net.cn/pages/component/checkbox/checkbox)
......
......@@ -115,7 +115,7 @@ datacom组件,对服务器数据规范、前端组件的数据输入和输出
- 设计更加清晰。服务器端给符合规范的数据,然后接受选择的结果数据。中间的ui交互无需关心。
- 结合 [uni-forms](https://ext.dcloud.net.cn/plugin?id=2773) 组件,自动实现表单校验。
- 搭配 uniCloud 的[unicloud-db组件](https://uniapp.dcloud.io/uniCloud/clientdb),数据库查询结果直接绑定给`datacom组件`,服务器代码直接就不用写了
- 搭配 uniCloud 的[schema2code页面生成系统](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode),数据库定义好schema,前端页面就不用写了,自动生成
- 搭配 uniCloud 的[schema2code页面生成系统](https://doc.dcloud.net.cn/uniCloud/schema?id=autocode),数据库定义好schema,前端页面就不用写了,自动生成
- 互操作性。可以轻易的切换更好的组件
举个例子,假使我们想实现一个城市选择的业务。
......@@ -269,14 +269,14 @@ localdata的示例上文已经举例,下面来看下直接指定uniCloud云数
export default {
data() {
return {
};
},
};
</script>
```
collection表名、field字段名、where条件的写法,详见[clientDB组件文档](https://uniapp.dcloud.net.cn/uniCloud/uni-clientdb-component?id=%e5%b1%9e%e6%80%a7)
collection表名、field字段名、where条件的写法,详见[clientDB组件文档](https://doc.dcloud.net.cn/uniCloud/uni-clientdb-component?id=%e5%b1%9e%e6%80%a7)
当然,支持绑定uniCloud数据,对于datacom组件规范来说,是可选的。
......@@ -354,7 +354,7 @@ datacom组件规范还要求支持绑定 value,且支持双向绑定,即:
### 使用mixinDatacom快速开发datacom@mixindatacom
> 版本要求:HBuilderX 3.1.0+
> 版本要求:HBuilderX 3.1.0+
开发一个支持localdata的datacom组件相对容易,但要开发支持云端数据的datacom组件,实现对collection、field、where等属性的解析,工作量还是不小的。
......@@ -371,7 +371,7 @@ mixin是vue的技术,不熟悉的可以点此了解[vue官网的mixin文档](h
|属性名 | 类型 | 默认值 | 说明|
|:-: | :-: | :-: | :-: |
|localdata |Array | |本地数据,[详情](https://uniapp.dcloud.net.cn/component/datacom)|
|spaceInfo |Object | |服务空间信息,新增于`HBuilderX 3.2.11`。同uniCloud.init参数,参考:[uniCloud.init](uniCloud/init.md?id=init-unicloud)|
|spaceInfo |Object | |服务空间信息,新增于`HBuilderX 3.2.11`。同uniCloud.init参数,参考:[uniCloud.init](https://doc.dcloud.net.cn/uniCloud/init.html?id=init-unicloud)|
|collection |String | |表名。支持输入多个表名,用 `,` 分割|
|field |String | |查询字段,多个字段用 `,` 分割|
|where |String | |查询条件,内容较多,另见jql文档:[详情](https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=jsquery)|
......@@ -388,7 +388,7 @@ mixin是vue的技术,不熟悉的可以点此了解[vue官网的mixin文档](h
|gettree |Boolean | false |是否查询树状数据,默认 `false`|
|startwith |String | '' |`gettree`的第一层级条件,此初始条件可以省略,不传startWith时默认从最顶级开始查询|
|limitlevel |Number | 10 |`gettree`查询返回的树的最大层级。超过设定层级的节点不会返回。默认10级,最大15,最小1|
|foreign-key |String | '' |手动指定使用的关联关系,HBuilderX 3.1.10+ [详情](/uniCloud/clientdb?id=lookup-foreign-key)|
|foreign-key |String | '' |手动指定使用的关联关系,HBuilderX 3.1.10+ [详情](https://doc.dcloud.net.cn/uniCloud/clientdb?id=lookup-foreign-key)|
`uniCloud.mixinDatacom` 的data
......@@ -479,7 +479,7 @@ mixin是vue的技术,不熟悉的可以点此了解[vue官网的mixin文档](h
```
- 方法2,使用 `mixinDatacomGet()`
- 方法2,使用 `mixinDatacomGet()`
需要多写些代码处理各种状态。如果`mixinDatacomEasyGet`的封装无法灵活满足你的需求,可以使用这种方式。
......@@ -574,6 +574,10 @@ mixin是vue的技术,不熟悉的可以点此了解[vue官网的mixin文档](h
#### `uniCloud.mixinDatacom` 源码 @mixinDatacomsource
为方便开发者理解mixinDatacom的工作原理,这里贴出mixinDatacom的源码:
uni-app-x 3.99+ 开始支持
::: preview
> js
```js
export default {
props: {
......@@ -818,3 +822,321 @@ export default {
}
}
```
> uts
```uts
type SuccessCallback<T> = (res : T | null) => void | null
type FailCallback = (err : any | null) => void | null
type CompleteCallback = () => void | null
export type MixinDatacomPaginationType = {
current : number,
size : number,
count : number
}
export type MixinDatacomGetOptions = {
collection ?: UTSJSONObject,
field ?: string,
orderBy ?: string,
where ?: any,
pageData ?: string,
pageCurrent ?: number,
pageSize ?: number,
getCount ?: boolean,
getTree ?: any,
getTreePath ?: UTSJSONObject,
startWith ?: string,
limitLevel ?: number,
groupBy ?: string,
groupField ?: string,
distinct ?: boolean,
pageIndistinct ?: boolean,
foreignKey ?: string,
loadtime ?: string,
manual ?: boolean
}
export type MixinDatacomEasyGetOptions = {
success ?: SuccessCallback<UniCloudDBGetResult>,
fail ?: FailCallback,
complete ?: CompleteCallback,
}
export const mixinDatacom = defineMixin({
slots: Object as SlotsType<{
default : {
data : Array<UTSJSONObject>,
loading : boolean,
hasMore : boolean,
pagination : MixinDatacomPaginationType,
error : UniCloudError | null
}
}>,
props: {
localdata: {
type: Array as PropType<Array<UTSJSONObject>>,
default: [] as Array<UTSJSONObject>
},
collection: {
type: Object,
default: ''
},
field: {
type: String,
default: ''
},
orderby: {
type: String,
default: ''
},
where: {
type: Object,
default: ''
},
pageData: {
type: String,
default: 'add'
},
pageCurrent: {
type: Number,
default: 1
},
pageSize: {
type: Number,
default: 20
},
getcount: {
type: Boolean,
default: false
},
gettree: {
type: Object,
default: ''
},
gettreepath: {
type: Boolean,
default: false
},
startwith: {
type: String,
default: ''
},
limitlevel: {
type: Number,
default: 10
},
groupby: {
type: String,
default: ''
},
groupField: {
type: String,
default: ''
},
distinct: {
type: Boolean,
default: false
},
pageIndistinct: {
type: Boolean,
default: false
},
foreignKey: {
type: String,
default: ''
},
loadtime: {
type: String,
default: 'auto'
},
manual: {
type: Boolean,
default: false
}
},
data() {
return {
mixinDatacomResData: [] as Array<UTSJSONObject>, // 请求返回的数据,调用 loadData 后会更新
mixinDatacomLoading: false, // 网络请求状态
mixinDatacomHasMore: false, // 是否有更多数据
mixinDatacomPage: {
current: 1,
size: 20,
count: 0,
} as MixinDatacomPaginationType, // 分页信息,详情见 created 生命周期
mixinDatacomError: null as UniCloudError | null, // 请求出错时的错误消息
}
},
created() {
this.mixinDatacomPage.current = this.pageCurrent
this.mixinDatacomPage.size = this.pageSize
const PROPS_NAME = ['', '', 'collection', 'field', 'getcount', 'orderby', 'where', 'groupby', 'groupField', 'distinct']
this.$watch(
() : any => [
this.pageCurrent,
this.pageSize,
this.collection,
this.field,
this.getcount,
this.orderby,
this.where,
this.groupby,
this.groupField,
this.distinct
],
(newValue : Array<any>, oldValue : Array<any>) => {
this.mixinDatacomPage.size = this.pageSize
if (newValue[0] !== oldValue[0]) {
this.mixinDatacomPage.current = this.pageCurrent
}
let needReset = false
let changed : Array<string> = []
for (let i = 2; i < newValue.length; i++) {
if (newValue[i] !== oldValue[i]) {
needReset = true
changed.push(PROPS_NAME[i])
}
}
this.onMixinDatacomPropsChange(needReset, changed)
}
)
},
methods: {
// props发生变化时被调用,在组件中覆盖此方法
// 非 pageCurrent,pageSize 改变时 needReset=true,需要重置数据
// changed,发生变化的属性名,类型为Array,例如 ['collection', 'action']
onMixinDatacomPropsChange(_ : boolean, changed : Array<string>) {
},
mixinDatacomEasyGet(options ?: MixinDatacomEasyGetOptions) {
if (this.mixinDatacomLoading) {
return
}
this.mixinDatacomLoading = true
this.mixinDatacomError = null
this.mixinDatacomGet(null).then((res : UniCloudDBGetResult) => {
const data = res.data
const count = res.count
if (this.getcount && count != null) {
this.mixinDatacomPage.count = count
}
this.mixinDatacomHasMore = !((count !== null) ? (this.mixinDatacomPage.current * this.mixinDatacomPage.size >= count) : (data.length < this.pageSize))
this.mixinDatacomResData = data
options?.success?.(res)
}).catch((err : any | null) => {
this.mixinDatacomError = err as UniCloudError
options?.fail?.(err)
}).finally(() => {
this.mixinDatacomLoading = false
options?.complete?.()
})
},
mixinDatacomGet(options ?: MixinDatacomGetOptions) : Promise<UniCloudDBGetResult> {
let db = uniCloud.databaseForJQL()
let collection = Array.isArray(this.collection) ? db.collection(...(this.collection as Array<any>)) : db.collection(this.collection)
let filter : UniCloudDBFilter | null = null
if (this.foreignKey.length > 0) {
filter = collection.foreignKey(this.foreignKey)
}
const where : any = options?.where ?? this.where
if (typeof where == 'string') {
const whereString = where as string
if (whereString.length > 0) {
filter = (filter != null) ? filter.where(where) : collection.where(where)
}
} else {
filter = (filter != null) ? filter.where(where) : collection.where(where)
}
let query : UniCloudDBQuery | null = null
if (this.field.length > 0) {
query = (filter != null) ? filter.field(this.field) : collection.field(this.field)
}
if (this.groupby.length > 0) {
if (query != null) {
query = query.groupBy(this.groupby)
} else if (filter != null) {
query = filter.groupBy(this.groupby)
}
}
if (this.groupField.length > 0) {
if (query != null) {
query = query.groupField(this.groupField)
} else if (filter != null) {
query = filter.groupField(this.groupField)
}
}
if (this.distinct == true) {
if (query != null) {
query = query.distinct(this.field)
} else if (filter != null) {
query = filter.distinct(this.field)
}
}
if (this.orderby.length > 0) {
if (query != null) {
query = query.orderBy(this.orderby)
} else if (filter != null) {
query = filter.orderBy(this.orderby)
}
}
const size = this.mixinDatacomPage.size
const current = this.mixinDatacomPage.current
if (query != null) {
query = query.skip(size * (current - 1)).limit(size)
} else if (filter != null) {
query = filter.skip(size * (current - 1)).limit(size)
} else {
query = collection.skip(size * (current - 1)).limit(size)
}
const getOptions = {}
const treeOptions = {
limitLevel: this.limitlevel,
startWith: this.startwith
}
const getCount : boolean = options?.getCount ?? this.getcount
if (this.getcount == true) {
getOptions['getCount'] = getCount
}
const getTree : any = options?.getTree ?? this.gettree
if (typeof getTree == 'string') {
const getTreeString = getTree as string
if (getTreeString.length > 0) {
getOptions['getTree'] = treeOptions
}
} else if (typeof getTree == 'object') {
getOptions['getTree'] = treeOptions
} else {
getOptions['getTree'] = getTree
}
const getTreePath = options?.getTreePath ?? this.gettreepath
if (typeof getTreePath == 'string') {
const getTreePathString = getTreePath as string
if (getTreePathString.length > 0) {
getOptions['getTreePath'] = getTreePath
}
} else {
getOptions['getTreePath'] = getTreePath
}
return query.get(getOptions)
}
}
})
```
:::
\ No newline at end of file
......@@ -62,19 +62,96 @@ editor组件目前只有H5、App的vue页面、微信小程序、百度小程序
* 粘贴时仅纯文本内容会被拷贝进编辑器
* 插入 html 到编辑器内时,编辑器会删除一些不必要的标签,以保证内容的统一。例如`<p><span>xxx</span></p>`会改写为`<p>xxx</p>`
* 编辑器聚焦时页面会被上推,系统行为以保证编辑区可见
* H5端会动态引入依赖 [quill.min.js](https://unpkg.com/quill@1.3.7/dist/quill.min.js)、[image-resize.min.js](https://unpkg.com/quill-image-resize-mp@3.0.1/image-resize.min.js),依赖从 [unpkg.com](https://unpkg.com) 加载,如过依赖加载较慢或失败,可以从 [github.com](https://github.com/dcloudio/uni-app/tree/dev/src/core/view/components/editor/quill) 或者 [gitee.com](https://gitee.com/dcloud/uni-app/tree/dev/src/core/view/components/editor/quill) 下载下来放在自己的服务器或 CDN 服务商,相比自己的服务器或者其他 CDN 服务商更推荐的做法是开发者将将所有前端资源托管在 [uniCloud 前端网页托管](https://uniapp.dcloud.net.cn/uniCloud/hosting.html) ,然后在 [自定义模板](../collocation/manifest?id=h5-template) 的 `head` 标签内引入。
* H5端会动态引入依赖 [quill.min.js](https://unpkg.com/quill@1.3.7/dist/quill.min.js)、[image-resize.min.js](https://unpkg.com/quill-image-resize-mp@3.0.1/image-resize.min.js),依赖从 [unpkg.com](https://unpkg.com) 加载,如过依赖加载较慢或失败,可以从 [github.com](https://github.com/dcloudio/uni-app/tree/dev/src/core/view/components/editor/quill) 或者 [gitee.com](https://gitee.com/dcloud/uni-app/tree/dev/src/core/view/components/editor/quill) 下载下来放在自己的服务器或 CDN 服务商,相比自己的服务器或者其他 CDN 服务商更推荐的做法是开发者将将所有前端资源托管在 [uniCloud 前端网页托管](https://doc.dcloud.net.cn/uniCloud/hosting.html) ,然后在 [自定义模板](../collocation/manifest?id=h5-template) 的 `head` 标签内引入。
* 不能直接插入视频或者其他文件,编辑时可以采用视频封面或者文件缩略图占位,并在图片属性中保存视频信息,预览时读取附加信息再还原为视频或者其他文件操作。
**示例代码** [查看演示](https://hellouniapp.dcloud.net.cn/pages/component/editor/editor)
::: preview https://hellouniapp.dcloud.net.cn/pages/component/editor/editor
示例中css文件地址https://github.com/dcloudio/hello-uniapp/blob/master/pages/component/editor/editor-icon.css
> Template
``` vue
<template>
<view class="container">
<editor id="editor" class="ql-container" :placeholder="placeholder" @ready="onEditorReady"></editor>
<button type="warn" @tap="undo">撤销</button>
<view class="page-body">
<view class='wrapper'>
<view class='toolbar' @tap="format" style="height: 120px;overflow-y: auto;">
<view :class="formats.bold ? 'ql-active' : ''" class="iconfont icon-zitijiacu" data-name="bold">
</view>
<view :class="formats.italic ? 'ql-active' : ''" class="iconfont icon-zitixieti" data-name="italic">
</view>
<view :class="formats.underline ? 'ql-active' : ''" class="iconfont icon-zitixiahuaxian"
data-name="underline"></view>
<view :class="formats.strike ? 'ql-active' : ''" class="iconfont icon-zitishanchuxian"
data-name="strike"></view>
<!-- #ifndef MP-BAIDU -->
<view :class="formats.align === 'left' ? 'ql-active' : ''" class="iconfont icon-zuoduiqi"
data-name="align" data-value="left"></view>
<!-- #endif -->
<view :class="formats.align === 'center' ? 'ql-active' : ''" class="iconfont icon-juzhongduiqi"
data-name="align" data-value="center"></view>
<view :class="formats.align === 'right' ? 'ql-active' : ''" class="iconfont icon-youduiqi"
data-name="align" data-value="right"></view>
<view :class="formats.align === 'justify' ? 'ql-active' : ''" class="iconfont icon-zuoyouduiqi"
data-name="align" data-value="justify"></view>
<!-- #ifndef MP-BAIDU -->
<view :class="formats.lineHeight ? 'ql-active' : ''" class="iconfont icon-line-height"
data-name="lineHeight" data-value="2"></view>
<view :class="formats.letterSpacing ? 'ql-active' : ''" class="iconfont icon-Character-Spacing"
data-name="letterSpacing" data-value="2em"></view>
<view :class="formats.marginTop ? 'ql-active' : ''" class="iconfont icon-722bianjiqi_duanqianju"
data-name="marginTop" data-value="20px"></view>
<view :class="formats.marginBottom ? 'ql-active' : ''" class="iconfont icon-723bianjiqi_duanhouju"
data-name="marginBottom" data-value="20px"></view>
<!-- #endif -->
<view class="iconfont icon-clearedformat" @tap="removeFormat"></view>
<!-- #ifndef MP-BAIDU -->
<view :class="formats.fontFamily ? 'ql-active' : ''" class="iconfont icon-font"
data-name="fontFamily" data-value="Pacifico"></view>
<view :class="formats.fontSize === '24px' ? 'ql-active' : ''" class="iconfont icon-fontsize"
data-name="fontSize" data-value="24px"></view>
<!-- #endif -->
<view :class="formats.color === '#0000ff' ? 'ql-active' : ''" class="iconfont icon-text_color"
data-name="color" data-value="#0000ff"></view>
<view :class="formats.backgroundColor === '#00ff00' ? 'ql-active' : ''"
class="iconfont icon-fontbgcolor" data-name="backgroundColor" data-value="#00ff00"></view>
<view class="iconfont icon-date" @tap="insertDate"></view>
<view class="iconfont icon--checklist" data-name="list" data-value="check"></view>
<view :class="formats.list === 'ordered' ? 'ql-active' : ''" class="iconfont icon-youxupailie"
data-name="list" data-value="ordered"></view>
<view :class="formats.list === 'bullet' ? 'ql-active' : ''" class="iconfont icon-wuxupailie"
data-name="list" data-value="bullet"></view>
<view class="iconfont icon-undo" @tap="undo"></view>
<view class="iconfont icon-redo" @tap="redo"></view>
<view class="iconfont icon-outdent" data-name="indent" data-value="-1"></view>
<view class="iconfont icon-indent" data-name="indent" data-value="+1"></view>
<view class="iconfont icon-fengexian" @tap="insertDivider"></view>
<view class="iconfont icon-charutupian" @tap="insertImage"></view>
<view :class="formats.header === 1 ? 'ql-active' : ''" class="iconfont icon-format-header-1"
data-name="header" :data-value="1"></view>
<view :class="formats.script === 'sub' ? 'ql-active' : ''" class="iconfont icon-zitixiabiao"
data-name="script" data-value="sub"></view>
<view :class="formats.script === 'super' ? 'ql-active' : ''" class="iconfont icon-zitishangbiao"
data-name="script" data-value="super"></view>
<view class="iconfont icon-shanchu" @tap="clear"></view>
<view :class="formats.direction === 'rtl' ? 'ql-active' : ''" class="iconfont icon-direction-rtl"
data-name="direction" data-value="rtl"></view>
</view>
<view class="editor-wrapper">
<editor id="editor" class="ql-container" placeholder="开始输入..." show-img-size show-img-toolbar
show-img-resize @statuschange="onStatusChange" :read-only="readOnly" @ready="onEditorReady">
</editor>
</view>
</view>
</view>
</view>
</template>
```
......@@ -84,23 +161,97 @@ editor组件目前只有H5、App的vue页面、微信小程序、百度小程序
export default {
data() {
return {
placeholder: '开始输入...'
readOnly: false,
formats: {}
}
},
onLoad() {
// #ifndef MP-BAIDU
uni.loadFontFace({
family: 'Pacifico',
source: 'url("https://sungd.github.io/Pacifico.ttf")'
})
// #endif
},
methods: {
readOnlyChange() {
this.readOnly = !this.readOnly
},
onEditorReady() {
// #ifdef MP-BAIDU
this.editorCtx = requireDynamicLib('editorLib').createEditorContext('editor');
// #endif
// #ifdef APP-PLUS || H5 ||MP-WEIXIN
uni.createSelectorQuery().select('#editor').context((res) => {
this.editorCtx = res.context
}).exec()
// #endif
// #ifdef MP-BAIDU
this.editorCtx = requireDynamicLib('editorLib').createEditorContext('editor');
// #endif
// #ifdef APP-PLUS || MP-WEIXIN || H5
uni.createSelectorQuery().select('#editor').context((res) => {
this.editorCtx = res.context
}).exec()
// #endif
},
undo() {
this.editorCtx.undo()
},
redo() {
this.editorCtx.redo()
},
format(e) {
let {
name,
value
} = e.target.dataset
if (!name) return
// console.log('format', name, value)
this.editorCtx.format(name, value)
},
onStatusChange(e) {
const formats = e.detail
this.formats = formats
},
insertDivider() {
this.editorCtx.insertDivider({
success: function() {
console.log('insert divider success')
}
})
},
clear() {
uni.showModal({
title: '清空编辑器',
content: '确定清空编辑器全部内容?',
success: res => {
if (res.confirm) {
this.editorCtx.clear({
success: function(res) {
console.log("clear success")
}
})
}
}
})
},
removeFormat() {
this.editorCtx.removeFormat()
},
insertDate() {
const date = new Date()
const formatDate = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`
this.editorCtx.insertText({
text: formatDate
})
},
insertImage() {
uni.chooseImage({
count: 1,
success: (res) => {
this.editorCtx.insertImage({
src: res.tempFilePaths[0],
alt: '图像',
success: function() {
console.log('insert image success')
}
})
}
})
}
}
}
......@@ -109,21 +260,52 @@ editor组件目前只有H5、App的vue页面、微信小程序、百度小程序
> Style
``` vue
<style>
.container {
padding: 10px;
@import "./editor-icon.css";
.page-body {
height: calc(100vh - var(--window-top) - var(--status-bar-height));
}
.wrapper {
height: 100%;
}
.editor-wrapper {
height: calc(100vh - var(--window-top) - var(--status-bar-height) - 140px);
background: #fff;
}
.iconfont {
display: inline-block;
padding: 8px 8px;
width: 24px;
height: 24px;
cursor: pointer;
font-size: 20px;
}
.toolbar {
box-sizing: border-box;
border-bottom: 0;
font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
}
#editor {
.ql-container {
box-sizing: border-box;
padding: 12px 15px;
width: 100%;
height: 300px;
background-color: #CCCCCC;
min-height: 30vh;
height: 100%;
margin-top: 20px;
font-size: 16px;
line-height: 1.5;
}
button {
margin-top: 10px;
.ql-active {
color: #06c;
}
</style>
```
:::
一个完整的内容管理系统比较复杂,DCloud已提供好了现成的`uni-cms`,开源、免费、全端可用、功能完善,包括管理端和用户端。还内置了ai生成文章和广告变现功能。详见:[https://uniapp.dcloud.net.cn/uniCloud/uni-cms.html](https://uniapp.dcloud.net.cn/uniCloud/uni-cms.html)
一个完整的内容管理系统比较复杂,DCloud已提供好了现成的`uni-cms`,开源、免费、全端可用、功能完善,包括管理端和用户端。还内置了ai生成文章和广告变现功能。详见:[https://doc.dcloud.net.cn/uniCloud/uni-cms.html](https://doc.dcloud.net.cn/uniCloud/uni-cms.html)
......@@ -334,10 +334,11 @@ A: App 3.4+ 已支持 Google 地图, App 3.4 以下版本使用下面的方案
使用三方定位或者地图服务,需向服务提供商(如:高德地图、百度地图、腾讯地图、谷歌地图)申请商业授权和缴纳费用(5万/年)。
DCloud为开发者争取了福利,可优惠获取商业授权。如有需求请发邮件到`shacui@dcloud.io`(注明你的公司名称、应用介绍、HBuilder账户);你也可以直接通过`企业微信`发起在线咨询,扫描以下二维码获取地图福利。如您需要快速回复,一定注明公司名称、应用名称/介绍、以及HBuilder账户,感谢你的理解与配合。
DCloud为开发者争取了福利,可优惠获取商业授权。如有需求请发邮件到`bd@dcloud.io`(注明你的公司名称、应用介绍、HBuilder账户);你也可以直接通过`企业微信`发起在线咨询,扫描以下二维码获取地图福利。如您需要快速回复,一定注明公司名称、应用名称/介绍、以及HBuilder账户,感谢你的理解与配合。
![](https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-ad/sc-weixin.png)
联系电话:17778170760
- 腾讯地图商业授权现优惠政策:买1年送1个月,买2年送1年。如需购买,请速扫以下二维码咨询与购买!
![](https://web-assets.dcloud.net.cn/unidoc/zh/uni-ad/sc-weixin.png)
详见:[https://uniapp.dcloud.net.cn/tutorial/app-geolocation.html#lic](https://uniapp.dcloud.net.cn/tutorial/app-geolocation.html#lic)
......@@ -347,7 +348,7 @@ DCloud为开发者争取了福利,可优惠获取商业授权。如有需求
> 下载地址:[https://ext.dcloud.net.cn/plugin?name=unicloud-map](https://ext.dcloud.net.cn/plugin?name=unicloud-map)
> 文档地址:[https://uniapp.dcloud.net.cn/uniCloud/unicloud-map.html](https://uniapp.dcloud.net.cn/uniCloud/unicloud-map.html)
> 文档地址:[https://doc.dcloud.net.cn/uniCloud/unicloud-map.html](https://doc.dcloud.net.cn/uniCloud/unicloud-map.html)
**渲染静态POI运行效果图**
......
......@@ -249,4 +249,4 @@ export default {
* 选择区域面积更高更大
* 支持多列数据分级加载,比如省市区选择,先选择省,然后动态联网加载该省的市。
* uniCloud自带了[opendb](https://gitee.com/dcloud/opendb)表,[opendb-city-china](https://gitee.com/dcloud/opendb/tree/master/collection/opendb-city-china),包括全国的省市区数据。在`<uni-data-picker>`组件上可直接绑定该数据,生成全端可用的、联网懒加载的省市区选择。
* unicloud数据库提供了[DB Schema](https://uniapp.dcloud.io/uniCloud/schema),还提供了[schema2code](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode)自动生成全套表单页面,包括界面、校验逻辑、提交入库。在schema中配置字段的格式,比如在用户地址表[uni-id-address](https://gitee.com/dcloud/opendb/tree/master/collection/uni-id-address)的字段`area_code`配置值域指向[opendb-city-china](https://gitee.com/dcloud/opendb/tree/master/collection/opendb-city-china)表,即可自动生成该用户地址的生成页面
* unicloud数据库提供了[DB Schema](https://uniapp.dcloud.io/uniCloud/schema),还提供了[schema2code](https://doc.dcloud.net.cn/uniCloud/schema?id=autocode)自动生成全套表单页面,包括界面、校验逻辑、提交入库。在schema中配置字段的格式,比如在用户地址表[uni-id-address](https://gitee.com/dcloud/opendb/tree/master/collection/uni-id-address)的字段`area_code`配置值域指向[opendb-city-china](https://gitee.com/dcloud/opendb/tree/master/collection/opendb-city-china)表,即可自动生成该用户地址的生成页面
......@@ -14,12 +14,17 @@
**属性说明**
|属性名|类型|默认值|说明|
|:-|:-|:-|:-|
|value|String||``<radio>`` 标识。当该 ``<radio>`` 选中时,``<radio-group>`` 的 change 事件会携带 ``<radio>`` 的 value|
|checked|Boolean|false|当前是否选中|
|disabled|Boolean|false|是否禁用|
|color|Color||radio的颜色,同css的color|
|属性名|类型|默认值|说明|平台差异说明|
|:-|:-|:-|:-|:-|
|value|String||``<radio>`` 标识。当该 ``<radio>`` 选中时,``<radio-group>`` 的 change 事件会携带 ``<radio>`` 的 value||
|checked|Boolean|false|当前是否选中||
|disabled|Boolean|false|是否禁用||
|color|Color||radio的颜色,同css的color||
|backgroundColor|Color|#ffffff|radio默认的背景颜色|H5(3.99+)、App-Vue(3.99+)|
|borderColor|Color|#d1d1d1|radio默认的边框颜色|H5(3.99+)、App-Vue(3.99+)|
|activeBackgroundColor|Color|#007AFF|radio选中时的背景颜色,优先级大于color属性|H5(3.99+)、App-Vue(3.99+)|
|activeBorderColor|Color||radio选中时的边框颜色|H5(3.99+)、App-Vue(3.99+)|
|iconColor|Color|#ffffff|radio的图标颜色|H5(3.99+)、App-Vue(3.99+)|
**示例** [查看演示](https://hellouniapp.dcloud.net.cn/pages/component/radio/radio)
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册