HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

uts与uniapp踩坑集锦

uniapp uts

自定义类型永远不要直接定义在函数声明中,特别是长一点的自定义类型。类型定义要设置在专门的声明文件中
类implements接口编辑器自动补全的代码,只留下函数名,(),{},这三个东西就行,其他的删掉自己写。记得 public和override这两个修饰符
uts暴露给js的函数的参数,参数类型不要设置成复杂的嵌套,uniapp1.0下会有问题。
uts传递数组,使用Array接受,元素类型后续再转化
uts export * from “...”再导出类,在js环境调用时报错
uts类没有重载函数能力,可让函数参数的类型为一个对象(UTSJSONOBJECT 或 types),对象属性可为空来规避。亦可直接写2个不同名的函数
uni.navigateBack函数,在网页中,刷新页面,页面堆栈会被清空,这时使用该api只会不停relauch页面,你会发现此时与log一起使用的话,log不见了,灵异事件,不好调试代码,不建议在网页应用中使用该api。相关源码如下

// 真正的h5平台源码,此时 浏览器没有“上一页”可返回,所以浏览器的行为是:刷新当前页面(而不是跳转)  
getApp().$router.go(-args.delta);  

//  \uni-app\packages\uni-app-plus\src\service\api\route\navigateBack.ts,app-plus平台相关源码,可以辅助理解,reLaunchEntryPage这句导致的relauch,api就是选择了原地刷新页面  
else if (isDirectPage(page)) {  
      reLaunchEntryPage()  
  }
继续阅读 »

自定义类型永远不要直接定义在函数声明中,特别是长一点的自定义类型。类型定义要设置在专门的声明文件中
类implements接口编辑器自动补全的代码,只留下函数名,(),{},这三个东西就行,其他的删掉自己写。记得 public和override这两个修饰符
uts暴露给js的函数的参数,参数类型不要设置成复杂的嵌套,uniapp1.0下会有问题。
uts传递数组,使用Array接受,元素类型后续再转化
uts export * from “...”再导出类,在js环境调用时报错
uts类没有重载函数能力,可让函数参数的类型为一个对象(UTSJSONOBJECT 或 types),对象属性可为空来规避。亦可直接写2个不同名的函数
uni.navigateBack函数,在网页中,刷新页面,页面堆栈会被清空,这时使用该api只会不停relauch页面,你会发现此时与log一起使用的话,log不见了,灵异事件,不好调试代码,不建议在网页应用中使用该api。相关源码如下

// 真正的h5平台源码,此时 浏览器没有“上一页”可返回,所以浏览器的行为是:刷新当前页面(而不是跳转)  
getApp().$router.go(-args.delta);  

//  \uni-app\packages\uni-app-plus\src\service\api\route\navigateBack.ts,app-plus平台相关源码,可以辅助理解,reLaunchEntryPage这句导致的relauch,api就是选择了原地刷新页面  
else if (isDirectPage(page)) {  
      reLaunchEntryPage()  
  }
收起阅读 »

uniapp app 安卓端 百度语音识别 "code": 4004,App name unknown

百度语音识别
plus.speech.startRecognize(  
                    options,  
                    function(s) {  
                        console.log("pass----",s);  
                        _this.sayData = s;  
                        plus.speech.stopRecognize();  
                        uni.redirectTo({  
                            url: '/pages/recentsearch/recentsearch?sayData='   _this.sayData  
                        })  

                    },   
                    function(e) {//失败  
                        console.log("fail----",e);  
                        uni.showToast({  
                            title: '语音识别失败',  
                            icon: 'none'  
                        });  
                    }  
                );

错误提示信息


{  
    "code": 4004,  
    "message": "App name unknown[(-3004)asr authentication failed[info:-3004]]"  
}

解决方法:
1、我们用的是个人的百度语音免费权限,权限过期了,重新换账号申请了一个并申请了免费的额度
2、在manifest配置最新的账号
3、真机调试时,把原来手机上的删除,重新制作自定义基座,基座完成后,重新运行到基座,即可实现语音功能!!!!!

继续阅读 »
plus.speech.startRecognize(  
                    options,  
                    function(s) {  
                        console.log("pass----",s);  
                        _this.sayData = s;  
                        plus.speech.stopRecognize();  
                        uni.redirectTo({  
                            url: '/pages/recentsearch/recentsearch?sayData='   _this.sayData  
                        })  

                    },   
                    function(e) {//失败  
                        console.log("fail----",e);  
                        uni.showToast({  
                            title: '语音识别失败',  
                            icon: 'none'  
                        });  
                    }  
                );

错误提示信息


{  
    "code": 4004,  
    "message": "App name unknown[(-3004)asr authentication failed[info:-3004]]"  
}

解决方法:
1、我们用的是个人的百度语音免费权限,权限过期了,重新换账号申请了一个并申请了免费的额度
2、在manifest配置最新的账号
3、真机调试时,把原来手机上的删除,重新制作自定义基座,基座完成后,重新运行到基座,即可实现语音功能!!!!!

收起阅读 »

普通vue项目打包为app

App离线打包
  1. vue路由设置为hash模式
  2. 打包
  3. 通过hbuilder创建5+APP项目
  4. 将打包问题覆盖到根目录
  5. 云打包

其实最重要就是hash模式 不然就是白屏。

  1. vue路由设置为hash模式
  2. 打包
  3. 通过hbuilder创建5+APP项目
  4. 将打包问题覆盖到根目录
  5. 云打包

其实最重要就是hash模式 不然就是白屏。

npm install报错

执行npm install报错

npm ERR! code CERT_HAS_EXPIRED  
npm ERR! errno CERT_HAS_EXPIRED  
npm ERR! request to https://registry.npm.taobao.org/@dcloudio/uni-helper-json failed, reason: certificate has expired

我并不知道这个应该怎么去解决当删除package.json中的"@dcloudio/uni-helper-json": "^1.0.13",npm就能完成下载并且用HbuilderX也能正常运行到开发者工具,请问应该怎么解决这个报错呢

继续阅读 »

执行npm install报错

npm ERR! code CERT_HAS_EXPIRED  
npm ERR! errno CERT_HAS_EXPIRED  
npm ERR! request to https://registry.npm.taobao.org/@dcloudio/uni-helper-json failed, reason: certificate has expired

我并不知道这个应该怎么去解决当删除package.json中的"@dcloudio/uni-helper-json": "^1.0.13",npm就能完成下载并且用HbuilderX也能正常运行到开发者工具,请问应该怎么解决这个报错呢

收起阅读 »

技术合伙人

1能力和待遇(饼向)
要求:主要是前端和后端精通就行,安卓原生要有个1年的经验起,因为很多uniapp搞不定的,需要自行写,有些买不起,太贵!年龄没有限制,学历也没有限制,我个人的技术全是学来的,初中毕业。

1能力和待遇(饼向)
要求:主要是前端和后端精通就行,安卓原生要有个1年的经验起,因为很多uniapp搞不定的,需要自行写,有些买不起,太贵!年龄没有限制,学历也没有限制,我个人的技术全是学来的,初中毕业。

UniPush-谷歌推送FCM新版V1配置指南

unipush fcm

FCM旧版HTTP 将在2024年6月20日后废弃,建议在此时间前迁移到最新的HTTP V1。

一、下载 V1 版本密钥文件

1,登录Firebase官网,进入项目设置

2,选择配置语言,点击生成新的私钥

3,生成密钥

4,生成密钥后,会下载到本地一个json文件

二、保存配置

登录Dcloud官网,上传并保存密钥文件。
⚠️注意:若google-services.json文件有变更,保存后需要重新云打包。若无变更,则仅需在后台保存配置。

继续阅读 »

FCM旧版HTTP 将在2024年6月20日后废弃,建议在此时间前迁移到最新的HTTP V1。

一、下载 V1 版本密钥文件

1,登录Firebase官网,进入项目设置

2,选择配置语言,点击生成新的私钥

3,生成密钥

4,生成密钥后,会下载到本地一个json文件

二、保存配置

登录Dcloud官网,上传并保存密钥文件。
⚠️注意:若google-services.json文件有变更,保存后需要重新云打包。若无变更,则仅需在后台保存配置。

收起阅读 »

前端网页托管,H5使用history路由模式,除了首页刷新白屏,文件不存在解决办法

找到前端网页托管=>参数配置=>配置404页面就可以解决

找到前端网页托管=>参数配置=>配置404页面就可以解决

***



邮箱验证的时候收不到邮件

邮箱验证的时候,可以收到验证码,但是收不到验证邮箱的消息
下面以网易邮箱为例:

  1. 用网易邮箱登录Hbuilder时会提示“当前账号尚未验证邮箱,请登录开发者中心 https://dev.dcloud.net.cn 完成邮箱验证后再登录”
  2. 去该网址验证时,登录的邮箱可以收到验证码,但是到验证的步骤,点击‘验证’按钮时会出现附件中的提示,然后邮箱中也收不到验证的消息
    重点来了!!!!!
    解决办法(以网易邮箱为例):
    网易邮箱-设置-反垃圾/黑白名单-白名单 里面添加 dev.dcloud.net.cn

我已经验证成功了!!!给小伙伴们避雷!!!

继续阅读 »

邮箱验证的时候,可以收到验证码,但是收不到验证邮箱的消息
下面以网易邮箱为例:

  1. 用网易邮箱登录Hbuilder时会提示“当前账号尚未验证邮箱,请登录开发者中心 https://dev.dcloud.net.cn 完成邮箱验证后再登录”
  2. 去该网址验证时,登录的邮箱可以收到验证码,但是到验证的步骤,点击‘验证’按钮时会出现附件中的提示,然后邮箱中也收不到验证的消息
    重点来了!!!!!
    解决办法(以网易邮箱为例):
    网易邮箱-设置-反垃圾/黑白名单-白名单 里面添加 dev.dcloud.net.cn

我已经验证成功了!!!给小伙伴们避雷!!!

收起阅读 »

在App中使用editor,遇到的editorContext无效问题

App环境下,
问题产生原因:
二级页面使用editor, id唯一情况下

//只有首次进入时, context 能追踪到元素本身  
  uni.createSelectorQuery().select(`#${this.dynamicID}`).context((res) => {  
        this.editorCtx = res.context  
}).exec()

再次或多次进入二级页面,context存在,但使用其内部方法无法追踪到当前元素本身;
(执行clear 方法 回调success,但是无效化,没有对当前元素进行操作)
(执行insertText 方法 无回调,内部程序 报错)
示例 1

//执行插入文字  
this.editorCtx.insertText({  
       text: 'test demo',  
       success: (res) => {  
            // 无响应反馈  
            console.log('success', res);  
        },  
       fail: (err) => {  
            // 无响应反馈  
            console.log('fail', err);  
      }  
});  
// 内部程序 报错 - 显示  
15:15:18.072 [WARNING] :addRange(): The given range isn't in document. at __uniappquill.js:7  
15:15:18.072 Uncaught TypeError: Cannot read properties of null (reading 'index') at uni-app-view.umd.js:1  

// 内部程序 报错 代码片段  
 case 'insertText':  
      {  
              range = quill.getSelection(true)  
              const { text = '' } = options  
              quill.insertText(range.index, text, Quill.sources.USER)  
              quill.setSelection(range.index + text.length, 0, Quill.sources.SILENT)  
      }  
break

我的解决办法:使用动态生成ID
使用动态生成ID后,上述问题便没有复现;

继续阅读 »

App环境下,
问题产生原因:
二级页面使用editor, id唯一情况下

//只有首次进入时, context 能追踪到元素本身  
  uni.createSelectorQuery().select(`#${this.dynamicID}`).context((res) => {  
        this.editorCtx = res.context  
}).exec()

再次或多次进入二级页面,context存在,但使用其内部方法无法追踪到当前元素本身;
(执行clear 方法 回调success,但是无效化,没有对当前元素进行操作)
(执行insertText 方法 无回调,内部程序 报错)
示例 1

//执行插入文字  
this.editorCtx.insertText({  
       text: 'test demo',  
       success: (res) => {  
            // 无响应反馈  
            console.log('success', res);  
        },  
       fail: (err) => {  
            // 无响应反馈  
            console.log('fail', err);  
      }  
});  
// 内部程序 报错 - 显示  
15:15:18.072 [WARNING] :addRange(): The given range isn't in document. at __uniappquill.js:7  
15:15:18.072 Uncaught TypeError: Cannot read properties of null (reading 'index') at uni-app-view.umd.js:1  

// 内部程序 报错 代码片段  
 case 'insertText':  
      {  
              range = quill.getSelection(true)  
              const { text = '' } = options  
              quill.insertText(range.index, text, Quill.sources.USER)  
              quill.setSelection(range.index + text.length, 0, Quill.sources.SILENT)  
      }  
break

我的解决办法:使用动态生成ID
使用动态生成ID后,上述问题便没有复现;

收起阅读 »

软键盘挤压页面导致露出上一页的内容

在input输入的时候点击点击拍照导致页面露出上一页,可以在input添加离开事件直接调用uni.hideKeyboard();恢复页面

在input输入的时候点击点击拍照导致页面露出上一页,可以在input添加离开事件直接调用uni.hideKeyboard();恢复页面