dcloud uni-app
uni-app 组件规范和扩展api与微信小程序基本相同。
uni-app提供了条件编译优化,可以优雅的为某平台写个性化代码、调用专有能力而不影响其他平台。
不能使用标准HTML标签,也不能用js对dom进行操作
接口能力(JS API)靠近微信小程序规范,但需将前缀 wx 替换为 uni,详见uni-app接口规范
uni-app 使用 upx 作为默认尺寸单位, upx 是相对于基准宽度的单位,可以根据屏幕宽度进行自适应。uni-app 规定屏幕基准宽度750upx。
开发者可以通过设计稿基准宽度计算页面元素 upx 值,设计稿 1px 与框架样式 1upx 转换公式如下:
设计稿 1px / 设计稿基准宽度 = 框架样式 1upx / 750upx
uniapp
http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/93
uniapp
组件https://uniapp.dcloud.io/component/README
Vue 单文件组件 (SFC) 规范
https://vue-loader.vuejs.org/zh/spec.html#%E7%AE%80%E4%BB%8B
uniapp接口
https://uniapp.dcloud.io/api/README
只能有一个根元素
Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.
weex原生组件
http://weex-project.io/cn/guide/
如何从插件市场下载使用组件
http://ask.dcloud.net.cn/article/35409
预编译器错误:代码使用了scss/sass语言,但未安装相应编译器,请在菜单工具-插件安装里安装相应编译插件 at components\uni-grid\uni-grid.vue:1
sass/scss在Hbuilder中的环境配置
https://blog.csdn.net/qq_37617413/article/details/65632848
小程序与小游戏获取用户信息接口调整,请开发者注意升级。
https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01
mpvue 获取用户信息 getUserInfo 与 bindGetUserInfo
https://blog.csdn.net/huchangjiang0/article/details/83149592
快速创建组件:以u开头加上组件的字母
navigateTo, redirectTo 只能打开非 tabBar 页面。
switchTab 只能打开 tabBar 页面。
reLaunch 可以打开任意页面。
页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
不能在 App.vue 里面进行页面跳转。
详见:https://uniapp.dcloud.io/frame?id=getcurrentpages
条件编译
uni-app 区分当前环境是H5、App还是微信小程序,可以使用条件编译的方式,参考:条件编译https://uniapp.dcloud.io/platform
Flex布局
为支持跨平台,框架建议使用Flex布局,关于Flex布局可以参考外部文档A Complete Guide to Flexbox等。
https://css-tricks.com/snippets/css/a-guide-to-flexbox/
http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
Dcloud Grid 宫格组件使用
下载地址:https://ext.dcloud.net.cn/plugin?id=27
组件存放路径如下:
<template> <view> <uni-grid :data="[ {image:'https://img-cdn-qiniu.dcloud.net.cn/img/shu.png',text:'圣诞树'}, {image:'https://img-cdn-qiniu.dcloud.net.cn/img/lindang.png',text:'铃铛'}, {image:'https://img-cdn-qiniu.dcloud.net.cn/img/laoren.png',text:'圣诞老人'}, {image:'https://img-cdn-qiniu.dcloud.net.cn/img/liwu.png',text:'礼物'}, {image:'https://img-cdn-qiniu.dcloud.net.cn/img/maozi.png',text:'帽子'}, {image:'https://img-cdn-qiniu.dcloud.net.cn/img/shoutao.png',text:'手套'}, {image:'https://img-cdn-qiniu.dcloud.net.cn/img/xueqiao.png',text:'雪橇'}, {image:'https://img-cdn-qiniu.dcloud.net.cn/img/xunlu.png',text:'驯鹿'}, {image:'https://img-cdn-qiniu.dcloud.net.cn/img/xuehua.png',text:'雪花'}]"> </uni-grid> </view> </template> <script> import uniGrid from "@/components/uni-grid/uni-grid.vue" export default { data() { return { }; }, components: {uniGrid} } </script> <style> </style> |
弹出框Dialog的使用方法
组件地址https://ext.dcloud.net.cn/plugin?id=59
<template> <view class="xydialig"> <text class="xydialig-title">消息提示</text> <view class="xydialig-content"> <button type="primary" @click="handleAlert01">有标题提示</button> <button type="primary" @click="handleAlert02">无标题提示</button> </view> <text class="xydialig-title">消息确认</text> <view class="xydialig-content"> <button type="primary" @click="handleAlert03">确认消息提示</button> </view> <!-- 有标题提示组件 --> <xy-dialog ref="xyDialog01" @cancelButton="handleClose" @confirmButton="handleConfirm" title="还不错哦" ></xy-dialog> <!-- 无标题提示组件 --> <xy-dialog ref="xyDialog02" title="false" @cancelButton="handleClose" @confirmButton="handleConfirm" ></xy-dialog> <!-- 消息确认提示组件 --> <xy-dialog ref="xyDialog03" @cancelButton="handleClose" @confirmButton="handleConfirm" ></xy-dialog> </view> </template> <script> // 引入组件 import xyDialog from '../../components/xy-dialog/xy-dialog.vue' export default { components: { xyDialog }, data() { return { } }, methods: { // 有标题提示方法 handleAlert01 () { this.$refs.xyDialog01.alert() }, // 无标题提示方法 handleAlert02 () { this.$refs.xyDialog02.alert() }, // 消息确认提示方法 handleAlert03 () { this.$refs.xyDialog03.confirm() }, // 关闭按钮方法 handleClose () { console.log('点击关闭按钮') uni.showToast({ title: '点击关闭按钮,触发自定义事件', icon: 'none' }) }, // 确定按钮方法 handleConfirm () { console.log('点击确定按钮') uni.showToast({ title: '点击确定按钮,触发自定义事件', icon: 'none' }) } } } </script> <style> .xydialig { padding: 30upx; } .xydialig-title { padding: 30upx 0; color: #606266; } .xydialig-content { padding: 30upx 0; } .xydialig-content button { margin-bottom: 10upx; } </style> |
dialog可以自定义的属性如下,可以从组件接收父组件的参数查看:
title: { type: String, default: '标题' }, message: { type: String, default: '你怎么会看到我^_^' }, // 内容对齐方式 center | left | right messageAlign: { type: String, default: 'center' }, // 是否显示确认按钮 showConfirmButton: { type: Boolean, default: true }, // 是否显示取消按钮 showCancelButton: { type: Boolean, default: false }, // 确定按钮的文案 confirmButtonText: { type: String, default: '确定' }, // 取消按钮的文案 cancelButtonText: { type: String, default: '取消' }, // 是否显示蒙层 overlay: { type: Boolean, default: true }, // 点击蒙层是否关闭弹窗 closeOnClickOverlay: { type: Boolean, default: false }
uni-app 全局变量的几种实现方式
①公用模块
定义一个专用的模块,用来组织和管理这些全局的变量,在需要的页面引入。
\common\helper.js
const websiteUrl = 'http://uniapp.dcloud.io'; const now = Date.now || function () { return new Date().getTime(); }; const isArray = Array.isArray || function (obj) { return obj instanceof Array; }; export default { websiteUrl, now, isArray } |
\pages\helperjs\index.vue 引入helper.js并使用
<script> import helper from '../../common/helper.js'; export default { data() { return { title:'这是一个标题字符串', user:[{ name:'小明', age:'男', }, { name:'小红', age:'女', }] }; }, onLoad(){ console.log('now():' + helper.now()); // now():1546516899422 console.log(helper.isArray(this.user)); // true }, methods: { } } </script> |
②挂载 Vue.prototype
将一些使用频率较高的常量或者方法,直接扩展到 Vue.prototype 上,每个 Vue 对象都会“继承”下来。
main.js
Vue.prototype.websiteUrl = 'http://uniapp.dcloud.io'; Vue.prototype.now = Date.now || function () { return new Date().getTime(); }; Vue.prototype.isArray = Array.isArray || function (obj) { return obj instanceof Array; }; |
\pages\helperjs\index.vue
<script> export default { data() { return { title:'这是一个标题字符串', user:[{ name:'小明', age:'男', }, { name:'小红', age:'女', }] }; }, onLoad(){ console.log('now():' + this.now()); // now():1546516899422 console.log(this.isArray(this.user)); // true }, methods: { } } </script> |
在HBuilder X\templates\file\vue中可以快速创建HBuilderX文件
uni-app指定重启开启页面 可以设置多个页面
"condition": { //编译模式配置,仅开发期间生效 "current": 0, //当前激活的编译模式(list 的索引项) "list": [{ "name": "课程", //模式名称 "pathName": "pages/course/detail", //启动页面,必选 "query": "id=1" //启动参数, QueryString 格式 }] } |
获得url参数
onLoad:function(e){
console.log(JSON.stringtify(e));
}
uni-app 中使用微信小程序第三方 SDK 及资源汇总
http://ask.dcloud.net.cn/article/35070
返回上一页并且携带参数
let pages = getCurrentPages(); //获取所有页面栈实例列表 let nowPage = pages[ pages.length - 1]; //当前页页面实例 let prevPage = pages[ pages.length - 2 ]; //上一页页面实例 prevPage.$vm.sh = 100; //修改上一页data里面的sh参数值为100 uni.navigateBack({ //uni.navigateTo跳转的返回,默认1为返回上一级 delta: 1 }); |
uniapp防抖
data() { return { timer: null } }, methods:{ // 防抖函数 debounce(fn, delay) { if (this.timer) clearTimeout(this.timer); this.timer = setTimeout(function() { fn(); }, delay); } searchStation(e) { this.debounce(() => { this.search() }, 2000) }, search() { console.log('search') }, } |
当前运行的基座不包含原生插件
报错:当前运行的基座不包含原生插件[JY-JPush],请在manifest中配置该插件,重新制作包括该原生插件的自定义运行基座
①菜单:运行基座选择=》自定义调试基座(重新创建的目录需要选择)
②制作自定义基座
编译时就会提示 安装”安装手机端自定义基座”
13:07:34.315 项目 ‘serviceManager_app’ 编译成功。
13:07:34.628 正在建立手机连接…
13:07:37.014 正在安装手机端自定义基座…
13:07:47.218 Success
13:07:47.313 3397 KB/s (12480483 bytes in 3.587s)
13:07:47.758 正在同步手机端程序文件…
13:07:48.743 同步手机端程序文件完成
13:07:48.898 正在启动自定义基座…
JY-JPush极光推送插件
/**极光推送插件 https://ext.dcloud.net.cn/plugin?id=741**/ export function setPushAlias(uid) { //#ifdef APP-PLUS const jyJPush = uni.requireNativePlugin('JY-JPush'); let platform = uni.getSystemInfoSync().platform if (platform == 'ios') { jyJPush.setJYJPushAlias({ userAlias: uid }, result => {}); jyJPush.addJYJPushReceiveOpenNotificationListener(result => { uni.reLaunch({ url: '/pages/index/index' }) }); } else if (platform == 'android') { // 安卓需要单独初始化 uniapp初始化 jyJPush.android_init(res => { console.log('初始化' + JSON.stringify(res)) if (res.errorCode == 0) { jyJPush.setJYJPushAlias({ userAlias: uid }, result => { console.log('极光push设置别名') console.log(JSON.stringify(result)); }); // 6.2.监听点击通知栏消息事件(点击通知栏的消息,或者悬浮框,会触发; // 做事件跳转,需要用到这个接口 jyJPush.addJYJPushReceiveOpenNotificationListener(result => { console.log('消息点击事件') //{"failedLink":"","showResourceList":[],"richType":0,"inAppMsgType":1,"_webPagePath":"","appkey":"ca49a4e040c57efc0a5ccba6","notificationExtras":"{}","inAppMsgShowType":2,"inAppMsgContentBody":"","developerArg0":"","isWmDeepLink":false,"deeplink":"","notificationStyle":0,"notificationPriority":0,"notificationAlertType":7,"sspWmOriginId":"","notificationInbox":"","notificationId":524813184,"appId":"com.zhongtong.workorder","targetPkgName":"","notificationNormalSmallIcon":"","failedAction":0,"isRichPush":false,"inAppType":0,"notificationChannelId":"","notificationTitle":"bbb","notificationContent":"啊啊啊啊啊","sspWxAppId":"","displayForeground":"","notificationCategory":"","notificationSmallIcon":"","notificationType":0,"inAppMsgShowPos":0,"notificationBigPicPath":"","notificationBuilderId":0,"sspWmType":0,"msgId":"54043448846307847","platform":0,"inAppMsgTitle":"","notificationBigText":"","notificationLargeIcon":""} console.log(JSON.stringify(result)); uni.reLaunch({ url: '/pages/index/index' }) }); } }) } //#endif } // 删除极光别名 export function deletePushAlias() { //#ifdef APP-PLUS const jyJPush = uni.requireNativePlugin('JY-JPush'); // 安卓需要单独初始化 uniapp初始化 jyJPush.deleteJYJPushAlias({ // 可以不用传值进去,但是需要配置这项数据 }, result => { console.log('删除别名') console.log(JSON.stringify(result)) }); //#endif } |
高德地图使用
https://ask.dcloud.net.cn/article/29 地图插件配置
高德地图经纬度转换地址信息(android平台)和天气信息(web服务)
APP模块设置 添加高德地图模块:设置appkey
注意:云端打包选择“公共测试证书”时,SHA1值并非为:BB:AC:E2:2F:97:3B:18:02:E7:D6:69:A3:7A:28:EF:D2:3F:A3:68:E7,uni.getlocation走fail回调会抛出当前apk的包名和sha1值。
ios真机调试
itools + itunes itools安装驱动后即可真机调试
爱思助手