HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

有人做过在线看房小程序的吗?

小程序

有人做过在线看房小程序的吗?类似截图中的服务,可以给我留言

有人做过在线看房小程序的吗?类似截图中的服务,可以给我留言

自定义editor富文本编辑器组件时要注意

onEditorReady() {
uni.createSelectorQuery().in(this).select('#editor').context((res) => {
this.editorCtx = res.context
}).exec()
},

要加入in(this),要不会报context null

继续阅读 »

onEditorReady() {
uni.createSelectorQuery().in(this).select('#editor').context((res) => {
this.editorCtx = res.context
}).exec()
},

要加入in(this),要不会报context null

收起阅读 »

关于在uniapp中使用支付宝登录授权,使用网页授权

因为客户要求可以用支付宝一键登录app,可是不知道为什么官方没有集成支付宝登录,又看了插件市场的要收费的插件,就打了退堂鼓,打算自己研究下,不过安卓开发已经好几年没搞了,现在感觉都已经不会了,而且ios的我也没搞过,用自己做原生插件怕是不行,参考:https://blog.csdn.net/fkew2009/article/details/87621753
下面给大家提供一个思路:

    //跳转到支付宝去要授权  
            goAlipay(){  
                let alipayUrl="https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=商户的APPID&scope=auth_user&redirect_uri=https://www.xxxxxxx.com/alipayCallback.html"  
                let openURL="alipays://platformapi/startapp?appId=20000067&url="+encodeURIComponent(alipayUrl);  
                console.log("openURL:" + openURL);  
                plus.runtime.openURL(openURL,err=>{  
                    uni.showToast({  
                        title:"打开支付宝失败!请检查是否已安装?",  
                        icon:'none'  
                    })  
                })  
            },

然后单独新建一个alipayCallback.html网页用于支付宝回调,内容如下:

<!doctype html>  
<html>  
    <head>  
        <meta charset="utf-8">  
        <title></title>  
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />  
    </head>  

    <body>  
        <div>  
            如果没有跳转请------  
            <a href="lkk://abc" id="url">点击这里</a>  
        </div>  
        <script type="text/javascript">  
            function getQueryVariable(variable) {  
                var query = window.location.search.substring(1);  
                var vars = query.split("&");  
                for (var i = 0; i < vars.length; i++) {  
                    var pair = vars[i].split("=");  
                    if (pair[0] == variable) {  
                        return pair[1];  
                    }  
                }  
                return (false);  
            }  
            window.onload = function() {  
                var code = getQueryVariable("auth_code");  
                console.log(code);  
                //alert("code:" + code);  
                document.getElementById('url').href = "testapp://io.lkk/login?"+encodeURIComponent(JSON.stringify({"code":code}));  
                window.location.href="testapp://io.lkk/login?"+encodeURIComponent(JSON.stringify({"code":code}));  
            }  
        </script>  
    </body>  

</html>  

然后到manifest.json下配置下scheme,用户在支付宝里跳回app,具体参考:https://ask.dcloud.net.cn/article/409
然后就是到支付宝开发平台添加应用了,怎么创建我就不废话了,你们可以自己百度,主要是配置回调地址,特意截图了,应该可以看明白吧?

然后你们自定义基座下,记得改下版本号,发现不改版本号,制作出来的基座还是和之前一样没变化,
然后将获取到auth_code,传给服务器让他们去获取其他信息了
可以在app.js里获取:

onShow: function() {  
            console.log('App Show')  
            var args = plus.runtime.arguments;  
            console.log('[args参数]',args);  
            let argsUrl = JSON.parse(decodeURIComponent(args.split('?')[1]));  
            if (argsUrl.code) {  
                // 处理args参数,如直达到某新页面等    
                plus.runtime.arguments = {};  
                uni.redirectTo({  
                    url: "/pages/login/login?code="+argsUrl.code  
                });  
            }  
        },

argsUrl.code 就是从支付宝返回的auth_code,发给服务器的逻辑我放到login页面里了,这个我就不贴出来了,

总结:
该方法确实可以得到支付宝的登录授权,就是体验不好,因为有alipayCallback.html中间页面,支付宝会报警告如下:


全过程大概要用户点击四次屏幕,体验太不好,我也是没法想到其他好法子了,Android我测试是没有问题的,iOS没测,不过听说在iOSscheme会不行,回头疫情好了去公司我再测测看行不行

不知道为什么用不了,支付宝既然有这个为什么不给用呢?百度谷歌都不知道该怎么用,如果有知道怎么用的兄弟告诉我下,感谢不尽!

继续阅读 »

因为客户要求可以用支付宝一键登录app,可是不知道为什么官方没有集成支付宝登录,又看了插件市场的要收费的插件,就打了退堂鼓,打算自己研究下,不过安卓开发已经好几年没搞了,现在感觉都已经不会了,而且ios的我也没搞过,用自己做原生插件怕是不行,参考:https://blog.csdn.net/fkew2009/article/details/87621753
下面给大家提供一个思路:

    //跳转到支付宝去要授权  
            goAlipay(){  
                let alipayUrl="https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=商户的APPID&scope=auth_user&redirect_uri=https://www.xxxxxxx.com/alipayCallback.html"  
                let openURL="alipays://platformapi/startapp?appId=20000067&url="+encodeURIComponent(alipayUrl);  
                console.log("openURL:" + openURL);  
                plus.runtime.openURL(openURL,err=>{  
                    uni.showToast({  
                        title:"打开支付宝失败!请检查是否已安装?",  
                        icon:'none'  
                    })  
                })  
            },

然后单独新建一个alipayCallback.html网页用于支付宝回调,内容如下:

<!doctype html>  
<html>  
    <head>  
        <meta charset="utf-8">  
        <title></title>  
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />  
    </head>  

    <body>  
        <div>  
            如果没有跳转请------  
            <a href="lkk://abc" id="url">点击这里</a>  
        </div>  
        <script type="text/javascript">  
            function getQueryVariable(variable) {  
                var query = window.location.search.substring(1);  
                var vars = query.split("&");  
                for (var i = 0; i < vars.length; i++) {  
                    var pair = vars[i].split("=");  
                    if (pair[0] == variable) {  
                        return pair[1];  
                    }  
                }  
                return (false);  
            }  
            window.onload = function() {  
                var code = getQueryVariable("auth_code");  
                console.log(code);  
                //alert("code:" + code);  
                document.getElementById('url').href = "testapp://io.lkk/login?"+encodeURIComponent(JSON.stringify({"code":code}));  
                window.location.href="testapp://io.lkk/login?"+encodeURIComponent(JSON.stringify({"code":code}));  
            }  
        </script>  
    </body>  

</html>  

然后到manifest.json下配置下scheme,用户在支付宝里跳回app,具体参考:https://ask.dcloud.net.cn/article/409
然后就是到支付宝开发平台添加应用了,怎么创建我就不废话了,你们可以自己百度,主要是配置回调地址,特意截图了,应该可以看明白吧?

然后你们自定义基座下,记得改下版本号,发现不改版本号,制作出来的基座还是和之前一样没变化,
然后将获取到auth_code,传给服务器让他们去获取其他信息了
可以在app.js里获取:

onShow: function() {  
            console.log('App Show')  
            var args = plus.runtime.arguments;  
            console.log('[args参数]',args);  
            let argsUrl = JSON.parse(decodeURIComponent(args.split('?')[1]));  
            if (argsUrl.code) {  
                // 处理args参数,如直达到某新页面等    
                plus.runtime.arguments = {};  
                uni.redirectTo({  
                    url: "/pages/login/login?code="+argsUrl.code  
                });  
            }  
        },

argsUrl.code 就是从支付宝返回的auth_code,发给服务器的逻辑我放到login页面里了,这个我就不贴出来了,

总结:
该方法确实可以得到支付宝的登录授权,就是体验不好,因为有alipayCallback.html中间页面,支付宝会报警告如下:


全过程大概要用户点击四次屏幕,体验太不好,我也是没法想到其他好法子了,Android我测试是没有问题的,iOS没测,不过听说在iOSscheme会不行,回头疫情好了去公司我再测测看行不行

不知道为什么用不了,支付宝既然有这个为什么不给用呢?百度谷歌都不知道该怎么用,如果有知道怎么用的兄弟告诉我下,感谢不尽!

收起阅读 »

建议增加 <script src="xx.js">标签的快捷打开功能

快捷方式 JavaScript
  1. 如下图,鼠标在这行时,按下ctrl键,就可以将src变为能点击状态, 然后就可以打开此文件,这样非常方便。
  2. 支持的文件需要考虑php aspx jsp...这些动态的文件, 不能只支持html,因为还有很多人用混合模式,或mvc

继续阅读 »
  1. 如下图,鼠标在这行时,按下ctrl键,就可以将src变为能点击状态, 然后就可以打开此文件,这样非常方便。
  2. 支持的文件需要考虑php aspx jsp...这些动态的文件, 不能只支持html,因为还有很多人用混合模式,或mvc

收起阅读 »

关于官方上传文件的请求方式,默认是post请求,不可直接修改请求方式

Debug

官方默认上传文件的请求方式是post,且不可修改,经过琢磨,我用以下方法可以修改请求方式为put,如果其他API不可以修改请求方式可以试试这个方法

uni.uploadFile({  
    url: `${baseUrl}/user/updateUserAvatar`,  
    filePath: res1.tempFilePaths[0],  
    formData: {  
    'account': this.userInfo.user.userAccount,  

    **'_method': 'PUT'**  **//重点是这个,在额外参数里加**  

    },  
    name: "multipartFile",  
    success:res2 => {  
    },  
    fail: err2 => {  
    }  
})
继续阅读 »

官方默认上传文件的请求方式是post,且不可修改,经过琢磨,我用以下方法可以修改请求方式为put,如果其他API不可以修改请求方式可以试试这个方法

uni.uploadFile({  
    url: `${baseUrl}/user/updateUserAvatar`,  
    filePath: res1.tempFilePaths[0],  
    formData: {  
    'account': this.userInfo.user.userAccount,  

    **'_method': 'PUT'**  **//重点是这个,在额外参数里加**  

    },  
    name: "multipartFile",  
    success:res2 => {  
    },  
    fail: err2 => {  
    }  
})
收起阅读 »

终于学会了制作小程序和app开发教程!!!

终于学会了制作小程序和app开发教程!!!

传说中的复制粘贴大法

原来可以如此简单 学会以后终于不在求人了

B站直达地址

终于学会了制作小程序和app开发教程!!!

传说中的复制粘贴大法

原来可以如此简单 学会以后终于不在求人了

B站直达地址

web2app vue应用 back 回退处理

Vue
if (window.plus) {  
  plusReady();  
} else {  
  document.addEventListener("plusready", plusReady, false);  
}  
// 扩展API准备完成后要执行的操作  
function plusReady() {  
  console.log("plus ready");  

  let click_back_time = Date.now();  
  /** 监听返回键 */  
  plus.key.addEventListener(  
    "backbutton",  
    () => {  

      if (/** 顶层页面 可以自己改成其他的meta参数,自己在router中定义是否为顶层页面 */ router.app.$route.meta.title.hide_back) {  
        /** 2s 内连续两次回退 退出应用 */  
        if (Date.now() - click_back_time > 2 * 1000) {  
          Toast("继续点击返回将退出应用");  
          click_back_time = Date.now();  
        } else {  
          plus.runtime.quit();  
        }  
      } else {  
        router.back();  
      }  
    },  
    false,  
  );  
}
继续阅读 »
if (window.plus) {  
  plusReady();  
} else {  
  document.addEventListener("plusready", plusReady, false);  
}  
// 扩展API准备完成后要执行的操作  
function plusReady() {  
  console.log("plus ready");  

  let click_back_time = Date.now();  
  /** 监听返回键 */  
  plus.key.addEventListener(  
    "backbutton",  
    () => {  

      if (/** 顶层页面 可以自己改成其他的meta参数,自己在router中定义是否为顶层页面 */ router.app.$route.meta.title.hide_back) {  
        /** 2s 内连续两次回退 退出应用 */  
        if (Date.now() - click_back_time > 2 * 1000) {  
          Toast("继续点击返回将退出应用");  
          click_back_time = Date.now();  
        } else {  
          plus.runtime.quit();  
        }  
      } else {  
        router.back();  
      }  
    },  
    false,  
  );  
}
收起阅读 »

uni.createSelectorQuery().in(this).select(".test"); select()里面不支持数字和中文如何解决,

uni.createSelectorQuery().in(this).select(".test");select()里面不支持数字和中文如何解决,DOMException: Failed to execute 'matches' on 'Element': '#2019-09' is not a valid selector. 有没有什么方法,我想获取dom 的top,可以在app ios 兼容的

继续阅读 »

uni.createSelectorQuery().in(this).select(".test");select()里面不支持数字和中文如何解决,DOMException: Failed to execute 'matches' on 'Element': '#2019-09' is not a valid selector. 有没有什么方法,我想获取dom 的top,可以在app ios 兼容的

收起阅读 »

Android uni小程序SDK集成原生功能模块教程

unimpsdk unimp uni小程序sdk uni小程序

Android uni小程序SDK集成 原生功能模块

SDK 提供了丰富的原生能力,您可根据需求自行添加功能模块,各功能模块所需的依赖库及资源文件,在uniMPSDK/Features目录中
目录结构

|-- uniMPSDK/Features  
    |-- Feature 依赖库说明.xls // 功能模块配置表  
    |-- libs                // 各功能模块的依赖库存放位置

请参考 Feature 依赖库说明.xls 配置表,添加模块所需依赖。修改项目相关配置信息;

集成方式

下面以 map 模块为例

首先查看Feature 依赖库说明.xls 表格说明需要添加amap-libs-release.aar,map-amap-release.aar两个库文件 及其AndroidManifest.xml等配置!

将amap-libs-release.aar,map-amap-release.aar两个库文件拷贝到项目中。主Module中的libs下。

地图依赖库文件拷贝完毕后。需要在build.gradle配置导入你引用的两个库文件。

    implementation files('libs/map-amap-release.aar')  
    implementation files('libs/amap-libs-release.aar')

参考Feature 依赖库说明.xls 中Map配置信息修改工程项目:

  • 修改AndroidManifest.xml 增加以下权限及配置
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
<uses-permission android:name="android.permission.READ_LOGS"/>  
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>  

<meta-data android:name="com.amap.api.v2.apikey" android:value="%申请高德地图apikey%"/>
  • 修改dcloud_properties.xml配置

在dcloud_properties.xml添加以下信息

features节点  
<feature name="Maps" value="io.dcloud.js.map.amap.JsMapPluginImpl"></feature>  
services节点  
<service name="Maps" value="io.dcloud.js.map.MapInitImpl"/>

以上配置完毕后。运行项目即可体验模块功能了。

功能模块与 API 对应关系

功能模块 5+APP项目 uni-app项目
Audio(音频) plus.audio https://uniapp.dcloud.io/api/media/record-manager https://uniapp.dcloud.io/api/media/audio-context
Audio(MP3格式音频支持库) plus.audio
Barcode(二维码) plus.barcode https://uniapp.dcloud.io/api/system/barcode
Bluetooth(低功耗蓝牙) plus.bluetooth https://uniapp.dcloud.io/api/system/bluetooth
Camera(摄像头) plus.camera
Contacts(通讯录) plus.contacts
Device(设备信息) plus.device https://uniapp.dcloud.io/api/system/info
Downloader(文件下载) plus.downloader https://uniapp.dcloud.io/api/request/network-file?id=downloadfile
Fingerprint(指纹识别) plus.fingerprint https://uniapp.dcloud.io/api/other/authentication
Geolocation(基础定位库) plus.geolocation https://uniapp.dcloud.io/api/location/location
Geolocation(高德定位) plus.geolocation https://uniapp.dcloud.io/api/location/location
Geolocation(系统定位) plus.geolocation https://uniapp.dcloud.io/api/location/location
iBeacon plus.ibeacon https://uniapp.dcloud.io/api/system/ibeacon
IO(文件系统) plus.io https://uniapp.dcloud.io/api/file/file
LivePusher(直播推流) plus.video.LivePusher https://uniapp.dcloud.io/api/media/live-player-context
Maps(高德地图) plus.map https://uniapp.dcloud.io/api/location/map
Messaging(短彩邮件消息) plus.messaging
Navigator(运行环境信息) plus.navigator https://uniapp.dcloud.io/api/system/info
Oauth(登录基础库) plus.oauth https://uniapp.dcloud.io/api/plugins/login
Oauth(小米登录) plus.oauth https://uniapp.dcloud.io/api/plugins/login
Oauth(QQ登录) plus.oauth https://uniapp.dcloud.io/api/plugins/login
Oauth(新浪微博登录) plus.oauth https://uniapp.dcloud.io/api/plugins/login
Oauth(微信登录) plus.oauth https://uniapp.dcloud.io/api/plugins/login
Payment(支付基础库) plus.payment https://uniapp.dcloud.io/api/plugins/payment
Payment(支付宝支付) plus.payment https://uniapp.dcloud.io/api/plugins/payment
Payment(微信支付) plus.payment https://uniapp.dcloud.io/api/plugins/payment
Share(分享基础库) plus.share https://uniapp.dcloud.io/api/plugins/share
Share(QQ分享) plus.share https://uniapp.dcloud.io/api/plugins/share
Share(新浪微博分享) plus.share https://uniapp.dcloud.io/api/plugins/share
Share(微信分享) plus.share https://uniapp.dcloud.io/api/plugins/share
Speech(语音识别基础库) plus.speech https://uniapp.dcloud.io/api/plugins/voice
Speech(百度语音识别) plus.speech https://uniapp.dcloud.io/api/plugins/voice
SQLite(数据库) plus.sqlite
Statistic(友盟统计) plus.statistic
Uploader(文件上传) plus.uploader https://uniapp.dcloud.io/api/request/network-file?id=uploadfile
VideoPlayer(视频播放) plus.video.VideoPlayer https://uniapp.dcloud.io/api/media/video
XHR(网络请求) plus.net https://uniapp.dcloud.io/api/request/request?id=request
nvue原生组件: map(高德地图) 不支持 https://uniapp.dcloud.io/component/map
nvue原生组件: barcode(二维码) 不支持 https://uniapp.dcloud.io/component/barcode
nvue原生组件: live-pusher(直播推流) 不支持 https://uniapp.dcloud.io/component/live-pusher
nvue原生组件: video视频 不支持 https://uniapp.dcloud.io/component/video
nvue原生组件: canvas 不支持 https://github.com/dcloudio/NvueCanvasDemo
继续阅读 »

Android uni小程序SDK集成 原生功能模块

SDK 提供了丰富的原生能力,您可根据需求自行添加功能模块,各功能模块所需的依赖库及资源文件,在uniMPSDK/Features目录中
目录结构

|-- uniMPSDK/Features  
    |-- Feature 依赖库说明.xls // 功能模块配置表  
    |-- libs                // 各功能模块的依赖库存放位置

请参考 Feature 依赖库说明.xls 配置表,添加模块所需依赖。修改项目相关配置信息;

集成方式

下面以 map 模块为例

首先查看Feature 依赖库说明.xls 表格说明需要添加amap-libs-release.aar,map-amap-release.aar两个库文件 及其AndroidManifest.xml等配置!

将amap-libs-release.aar,map-amap-release.aar两个库文件拷贝到项目中。主Module中的libs下。

地图依赖库文件拷贝完毕后。需要在build.gradle配置导入你引用的两个库文件。

    implementation files('libs/map-amap-release.aar')  
    implementation files('libs/amap-libs-release.aar')

参考Feature 依赖库说明.xls 中Map配置信息修改工程项目:

  • 修改AndroidManifest.xml 增加以下权限及配置
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>  
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
<uses-permission android:name="android.permission.READ_LOGS"/>  
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>  

<meta-data android:name="com.amap.api.v2.apikey" android:value="%申请高德地图apikey%"/>
  • 修改dcloud_properties.xml配置

在dcloud_properties.xml添加以下信息

features节点  
<feature name="Maps" value="io.dcloud.js.map.amap.JsMapPluginImpl"></feature>  
services节点  
<service name="Maps" value="io.dcloud.js.map.MapInitImpl"/>

以上配置完毕后。运行项目即可体验模块功能了。

功能模块与 API 对应关系

功能模块 5+APP项目 uni-app项目
Audio(音频) plus.audio https://uniapp.dcloud.io/api/media/record-manager https://uniapp.dcloud.io/api/media/audio-context
Audio(MP3格式音频支持库) plus.audio
Barcode(二维码) plus.barcode https://uniapp.dcloud.io/api/system/barcode
Bluetooth(低功耗蓝牙) plus.bluetooth https://uniapp.dcloud.io/api/system/bluetooth
Camera(摄像头) plus.camera
Contacts(通讯录) plus.contacts
Device(设备信息) plus.device https://uniapp.dcloud.io/api/system/info
Downloader(文件下载) plus.downloader https://uniapp.dcloud.io/api/request/network-file?id=downloadfile
Fingerprint(指纹识别) plus.fingerprint https://uniapp.dcloud.io/api/other/authentication
Geolocation(基础定位库) plus.geolocation https://uniapp.dcloud.io/api/location/location
Geolocation(高德定位) plus.geolocation https://uniapp.dcloud.io/api/location/location
Geolocation(系统定位) plus.geolocation https://uniapp.dcloud.io/api/location/location
iBeacon plus.ibeacon https://uniapp.dcloud.io/api/system/ibeacon
IO(文件系统) plus.io https://uniapp.dcloud.io/api/file/file
LivePusher(直播推流) plus.video.LivePusher https://uniapp.dcloud.io/api/media/live-player-context
Maps(高德地图) plus.map https://uniapp.dcloud.io/api/location/map
Messaging(短彩邮件消息) plus.messaging
Navigator(运行环境信息) plus.navigator https://uniapp.dcloud.io/api/system/info
Oauth(登录基础库) plus.oauth https://uniapp.dcloud.io/api/plugins/login
Oauth(小米登录) plus.oauth https://uniapp.dcloud.io/api/plugins/login
Oauth(QQ登录) plus.oauth https://uniapp.dcloud.io/api/plugins/login
Oauth(新浪微博登录) plus.oauth https://uniapp.dcloud.io/api/plugins/login
Oauth(微信登录) plus.oauth https://uniapp.dcloud.io/api/plugins/login
Payment(支付基础库) plus.payment https://uniapp.dcloud.io/api/plugins/payment
Payment(支付宝支付) plus.payment https://uniapp.dcloud.io/api/plugins/payment
Payment(微信支付) plus.payment https://uniapp.dcloud.io/api/plugins/payment
Share(分享基础库) plus.share https://uniapp.dcloud.io/api/plugins/share
Share(QQ分享) plus.share https://uniapp.dcloud.io/api/plugins/share
Share(新浪微博分享) plus.share https://uniapp.dcloud.io/api/plugins/share
Share(微信分享) plus.share https://uniapp.dcloud.io/api/plugins/share
Speech(语音识别基础库) plus.speech https://uniapp.dcloud.io/api/plugins/voice
Speech(百度语音识别) plus.speech https://uniapp.dcloud.io/api/plugins/voice
SQLite(数据库) plus.sqlite
Statistic(友盟统计) plus.statistic
Uploader(文件上传) plus.uploader https://uniapp.dcloud.io/api/request/network-file?id=uploadfile
VideoPlayer(视频播放) plus.video.VideoPlayer https://uniapp.dcloud.io/api/media/video
XHR(网络请求) plus.net https://uniapp.dcloud.io/api/request/request?id=request
nvue原生组件: map(高德地图) 不支持 https://uniapp.dcloud.io/component/map
nvue原生组件: barcode(二维码) 不支持 https://uniapp.dcloud.io/component/barcode
nvue原生组件: live-pusher(直播推流) 不支持 https://uniapp.dcloud.io/component/live-pusher
nvue原生组件: video视频 不支持 https://uniapp.dcloud.io/component/video
nvue原生组件: canvas 不支持 https://github.com/dcloudio/NvueCanvasDemo
收起阅读 »

uni-app checkbox组件和switch组件checked属性无效的解决方案

switch checkbox

> 相信许多开发者都有遇到过 uni-app 中的 复选框组件(checkbox)和开关组件(switch)在改变 checked 属性会有无效的问题。本篇文章将分析问题的产生和解决方法。

完整的分析过程和解决方法请查看小编的博客原创文章,字太多。难码!
文章地址:https://blog.csdn.net/u013350495/article/details/104347419

小编有发布过相同示例的插件,完整源码获取方式:

  1. uni-app 插件市场:https://ext.dcloud.net.cn/plugin?id=648
  2. gitee 代码仓库:https://gitee.com/myDarling/uniapp-extend
继续阅读 »

> 相信许多开发者都有遇到过 uni-app 中的 复选框组件(checkbox)和开关组件(switch)在改变 checked 属性会有无效的问题。本篇文章将分析问题的产生和解决方法。

完整的分析过程和解决方法请查看小编的博客原创文章,字太多。难码!
文章地址:https://blog.csdn.net/u013350495/article/details/104347419

小编有发布过相同示例的插件,完整源码获取方式:

  1. uni-app 插件市场:https://ext.dcloud.net.cn/plugin?id=648
  2. gitee 代码仓库:https://gitee.com/myDarling/uniapp-extend
收起阅读 »

多张图片上传(源码分享+实现分析)

图片上传

本篇文章以小程序中的代表【微信小程序】为例,分享一下在微信小程序中实现多图上传的源码实现。
其它小程序和uniapp都可通过该思路实现

代码片段(可导入微信WEB开发者工具体验):https://developers.weixin.qq.com/s/DHrt69mk7af3

两种不同实现方法的优缺点,请查看我的 博客原创文章,在文章中有详细的说明

小程序 多张图片上传 文章地址:https://blog.csdn.net/u013350495/article/details/104326088

JS源码:

Page({  
  data: {  
    // 已选择上传的本地图片地址  
    urlArr:['helang.jpg','1846492969.jpg','web.jpg']  
  },  
  onLoad: function () {  

  },  
  // 多图上传-回调式  
  uploadCallback(){  
    let index = 0;  // 当前位置,标识已上传到第几张图片  
    let newUrls = []; // 上传成功后的图片地址数组  
    // 图片上传方法  
    let upload = ()=>{  
      let nowUrl = this.data.urlArr[index]; //当前待上传的图片地址  
      wx.showLoading({  
        title: '正在上传',  
      });  
      /*   
        无图片上传接口,收setTimeout 模拟延迟状态  
        项目中替换为 wx.uploadFile 即可  
      */  
      // 假设每 1000ms 上传一张图片  
      setTimeout(()=>{  
        // 此处为已上传成功后的回调函数内容  
        let resUrl = `服务器返回上传后的地址 ${nowUrl}`; //假设这是上传成功后返回的地址  
        newUrls.push(resUrl); // 将上传后的地址添加到成功数组中  

        // 判断图片是否已经全部上传完成  
        if (index >= (this.data.urlArr.length-1)){  
          send();  
        }else{  
           //未全部上传完时标识位置+1并再次调用上传方法  
          index++;   
          upload();  
        }  
      },1000);  
    }  
    // 发送方法,用作图片上传完后,得到图片地址提交给其它接口或其它操作  
    let send = () => {  
      // 关闭加载提示  
      wx.hideLoading();  
      wx.showToast({  
        title: '上传成功',  
        icon:'success'  
      })  

      // 输出已经上传完的图片地址,请查看控制台结果  
      console.log(newUrls);  
    }  

    // 调用上传方法  
    upload();  
  },  
  // 多图上传-Promise  
  uploadPromise(){  
    /* Promise 对象数组 */  
    let p_arr = [];  

    /* 新建 Promise 方法,nowUrl参数为当前上传的图片地址 */  
    let new_p = (nowUrl) => {  
      return new Promise((resolve, reject) => {  
        /*   
        无图片上传接口,收setTimeout 模拟延迟状态  
        项目中替换为 wx.uploadFile 即可  
        */  
        // 假设每 1000ms 上传一张图片  
        setTimeout(()=>{  
          // 此处为已上传成功后的回调函数内容  
          let resUrl = `服务器返回上传后的地址 ${nowUrl}`; //假设这是上传成功后返回的地址  
          resolve(resUrl);  
        },1000);  
      })  
    }  

    // 遍历数据,创建相应的 Promise 数组数据  
    this.data.urlArr.forEach((item, index) => {  
      let nowUrl = this.data.urlArr[index]; //当前待上传的图片地址  
      p_arr.push(new_p(nowUrl));  
    });  

    wx.showLoading({  
      title: '正在上传',  
    });  
    /* 所有图片上传完成后调用该方法 */  
    Promise.all(p_arr).then((res) => {  
      // 关闭加载提示  
      wx.hideLoading();  
      wx.showToast({  
        title: '上传成功',  
        icon: 'success'  
      })  
      // 输出已经上传完的图片地址,请查看控制台结果  
      console.log(res);  
    });  
  }  
})

继续阅读 »

本篇文章以小程序中的代表【微信小程序】为例,分享一下在微信小程序中实现多图上传的源码实现。
其它小程序和uniapp都可通过该思路实现

代码片段(可导入微信WEB开发者工具体验):https://developers.weixin.qq.com/s/DHrt69mk7af3

两种不同实现方法的优缺点,请查看我的 博客原创文章,在文章中有详细的说明

小程序 多张图片上传 文章地址:https://blog.csdn.net/u013350495/article/details/104326088

JS源码:

Page({  
  data: {  
    // 已选择上传的本地图片地址  
    urlArr:['helang.jpg','1846492969.jpg','web.jpg']  
  },  
  onLoad: function () {  

  },  
  // 多图上传-回调式  
  uploadCallback(){  
    let index = 0;  // 当前位置,标识已上传到第几张图片  
    let newUrls = []; // 上传成功后的图片地址数组  
    // 图片上传方法  
    let upload = ()=>{  
      let nowUrl = this.data.urlArr[index]; //当前待上传的图片地址  
      wx.showLoading({  
        title: '正在上传',  
      });  
      /*   
        无图片上传接口,收setTimeout 模拟延迟状态  
        项目中替换为 wx.uploadFile 即可  
      */  
      // 假设每 1000ms 上传一张图片  
      setTimeout(()=>{  
        // 此处为已上传成功后的回调函数内容  
        let resUrl = `服务器返回上传后的地址 ${nowUrl}`; //假设这是上传成功后返回的地址  
        newUrls.push(resUrl); // 将上传后的地址添加到成功数组中  

        // 判断图片是否已经全部上传完成  
        if (index >= (this.data.urlArr.length-1)){  
          send();  
        }else{  
           //未全部上传完时标识位置+1并再次调用上传方法  
          index++;   
          upload();  
        }  
      },1000);  
    }  
    // 发送方法,用作图片上传完后,得到图片地址提交给其它接口或其它操作  
    let send = () => {  
      // 关闭加载提示  
      wx.hideLoading();  
      wx.showToast({  
        title: '上传成功',  
        icon:'success'  
      })  

      // 输出已经上传完的图片地址,请查看控制台结果  
      console.log(newUrls);  
    }  

    // 调用上传方法  
    upload();  
  },  
  // 多图上传-Promise  
  uploadPromise(){  
    /* Promise 对象数组 */  
    let p_arr = [];  

    /* 新建 Promise 方法,nowUrl参数为当前上传的图片地址 */  
    let new_p = (nowUrl) => {  
      return new Promise((resolve, reject) => {  
        /*   
        无图片上传接口,收setTimeout 模拟延迟状态  
        项目中替换为 wx.uploadFile 即可  
        */  
        // 假设每 1000ms 上传一张图片  
        setTimeout(()=>{  
          // 此处为已上传成功后的回调函数内容  
          let resUrl = `服务器返回上传后的地址 ${nowUrl}`; //假设这是上传成功后返回的地址  
          resolve(resUrl);  
        },1000);  
      })  
    }  

    // 遍历数据,创建相应的 Promise 数组数据  
    this.data.urlArr.forEach((item, index) => {  
      let nowUrl = this.data.urlArr[index]; //当前待上传的图片地址  
      p_arr.push(new_p(nowUrl));  
    });  

    wx.showLoading({  
      title: '正在上传',  
    });  
    /* 所有图片上传完成后调用该方法 */  
    Promise.all(p_arr).then((res) => {  
      // 关闭加载提示  
      wx.hideLoading();  
      wx.showToast({  
        title: '上传成功',  
        icon: 'success'  
      })  
      // 输出已经上传完的图片地址,请查看控制台结果  
      console.log(res);  
    });  
  }  
})

收起阅读 »

【建议】HBX能否自动识别文档的缩进格式?

由于不同项目文件缩进格式不同,在vscode里能够自动识别,打开的不同文件,每个都会自动按当前文档的缩进格式适配,编辑器下方能够显示该文档的缩进格式,HBX不行,只能统一一个缩进设置,这对于管理多个不同程序员的项目非常不方便,会导致混乱

由于不同项目文件缩进格式不同,在vscode里能够自动识别,打开的不同文件,每个都会自动按当前文档的缩进格式适配,编辑器下方能够显示该文档的缩进格式,HBX不行,只能统一一个缩进设置,这对于管理多个不同程序员的项目非常不方便,会导致混乱