HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

查找实例中的元素引起错误Error: Not Found:Page[2][-1,10] at view.umd.min.js:1

经验分享

这是github源码中的查找元素方法

export function findElm (component, pageVm) {  
  if (!pageVm) {  
    return console.error('page is not ready')  
  }  
  if (!component) {  
    return pageVm.$el  
  }  
  if (__PLATFORM__ === 'app-plus') {  
    if (typeof component === 'string') {  
      const componentVm = findVmById(component, pageVm)  
      if (!componentVm) {  
        throw new Error(`Not Found:Page[${pageVm.$page.id}][${component}]`)  
      }  
      return componentVm.$el  
    }  
  }  
  return component.$el  
}

在我们写的组件或者页面的报错
Error: Not Found:Page[2][-1,10] at view.umd.min.js:1

分析:

  1. [2]的2是getCurrentPages()页面数组的第2个
  2. [-1,10]是页面的$id,可通过getCurrentPages()[1].$vm.$id 查询,通常为-1
  3. typeof _$id 为数字是不会报错的,报错时component为“-1,10”

来源:
当我们执行一些查询元素宽高方法时,找不到元素。
可能是元素加载顺序的问题,比如在父组件的mounted周期执行了查询子组件高度的方法,但子组件中的mounted生命周期并没有完全执行完,导致子组件实际上还未渲染完。

继续阅读 »

这是github源码中的查找元素方法

export function findElm (component, pageVm) {  
  if (!pageVm) {  
    return console.error('page is not ready')  
  }  
  if (!component) {  
    return pageVm.$el  
  }  
  if (__PLATFORM__ === 'app-plus') {  
    if (typeof component === 'string') {  
      const componentVm = findVmById(component, pageVm)  
      if (!componentVm) {  
        throw new Error(`Not Found:Page[${pageVm.$page.id}][${component}]`)  
      }  
      return componentVm.$el  
    }  
  }  
  return component.$el  
}

在我们写的组件或者页面的报错
Error: Not Found:Page[2][-1,10] at view.umd.min.js:1

分析:

  1. [2]的2是getCurrentPages()页面数组的第2个
  2. [-1,10]是页面的$id,可通过getCurrentPages()[1].$vm.$id 查询,通常为-1
  3. typeof _$id 为数字是不会报错的,报错时component为“-1,10”

来源:
当我们执行一些查询元素宽高方法时,找不到元素。
可能是元素加载顺序的问题,比如在父组件的mounted周期执行了查询子组件高度的方法,但子组件中的mounted生命周期并没有完全执行完,导致子组件实际上还未渲染完。

收起阅读 »

uniapp关于微信小程序新隐私政策的解决方案------已发布插件

隐私弹窗 隐私政策 微信小程序 uniapp

根据微信官网最新关于用户隐私做出的更改,特此推出该插件,仅限于微信小程序使用,注意做好跨平台判断<!-- #ifdef MP-WEIXIN -->组件<!-- #endif -->,

需要注意:
1、微信公众平台登录->设置->服务内容声明->用户隐私保护指引 更新并声明项目用到的隐私相关接口的用途(很关键,不然不会触发隐私弹框),
2、manifest.json是否加入"usePrivacyCheck": true
3、组件是否正确导入、注册并使用
4、小程序基础库是否大于2.32.3

具体使用流程请看组件https://ext.dcloud.net.cn/plugin?id=14409,不用自己判断是否同意的回调,组件会在用户调用隐私相关接口时自行弹框,组均封装完成,开箱即用,同时弹框有唯一性,多个弹框弹出回开启一个并自动关闭其他弹框

如使用过程中有问题或有一些好的建议,欢迎加QQ群互相学习交流:120594820

继续阅读 »

根据微信官网最新关于用户隐私做出的更改,特此推出该插件,仅限于微信小程序使用,注意做好跨平台判断<!-- #ifdef MP-WEIXIN -->组件<!-- #endif -->,

需要注意:
1、微信公众平台登录->设置->服务内容声明->用户隐私保护指引 更新并声明项目用到的隐私相关接口的用途(很关键,不然不会触发隐私弹框),
2、manifest.json是否加入"usePrivacyCheck": true
3、组件是否正确导入、注册并使用
4、小程序基础库是否大于2.32.3

具体使用流程请看组件https://ext.dcloud.net.cn/plugin?id=14409,不用自己判断是否同意的回调,组件会在用户调用隐私相关接口时自行弹框,组均封装完成,开箱即用,同时弹框有唯一性,多个弹框弹出回开启一个并自动关闭其他弹框

如使用过程中有问题或有一些好的建议,欢迎加QQ群互相学习交流:120594820

收起阅读 »

因上传用户图片,违反隐私策略 被Google play下架

GooglePlay下架


实际上检查代码不存在任何上传文件代码,本身就是蓝牙本地软件,不存在互联网交互


实际上检查代码不存在任何上传文件代码,本身就是蓝牙本地软件,不存在互联网交互

希望打印日志增加如下功能。

新需求

希望打印日志增加对
console.group 和 groupCollapsed 的支持
然后在控制台显示的时候也支持 折叠 的功能。

希望打印日志增加对
console.group 和 groupCollapsed 的支持
然后在控制台显示的时候也支持 折叠 的功能。

解决你的图标难!成功移植拥有7000+图标的可商用图标项目:Material Design Icons 图标库

iconfont icon 字体图标绘制 搜索图标 图标

插件简介

本插件为非官方插件,原作者为 Pictogrammers 。由于插件作者常年使用Vuetify.js框架进行前端开发,发现该框架使用的Material Design Icons图标库资源丰富拥有7000+图标、风格基本统一、还很易用,后来迁移到uni-app进行小程序开发时一直苦于没有找到跟Material Design Icons比拟的图标库(尽管阿里巴巴图标矢量库等图标库资源远比该库丰富,但里面有着大量样式或使用场景重复或相似的图标),故自己将其移植过来了。

插件地址

https://ext.dcloud.net.cn/plugin?id=10508

示例预览

示例预览图

继续阅读 »

插件简介

本插件为非官方插件,原作者为 Pictogrammers 。由于插件作者常年使用Vuetify.js框架进行前端开发,发现该框架使用的Material Design Icons图标库资源丰富拥有7000+图标、风格基本统一、还很易用,后来迁移到uni-app进行小程序开发时一直苦于没有找到跟Material Design Icons比拟的图标库(尽管阿里巴巴图标矢量库等图标库资源远比该库丰富,但里面有着大量样式或使用场景重复或相似的图标),故自己将其移植过来了。

插件地址

https://ext.dcloud.net.cn/plugin?id=10508

示例预览

示例预览图

收起阅读 »

uniapp关于微信小程序新隐私政策的临时解决方案------已发布插件

隐私政策 微信小程序

简单的说一下能解决 什么问题呢?

首先,uniapp目前还没有同步更新微信小程序新隐私政策的button属性和api接口。
然后,经过查阅文档和社区,再加上不断踩坑,总结出来的一个uniapp官方没有更新前的一个临时解决方案。

首先你的确保你了解过微信小程序的新隐私政策

小程序新版隐私政策

这个就要求必须要先在小程序隐私政策中添加相关隐私接口信息,通过审核并且等待其真实生效后,才能调用。这个生效时间大概在审核通过后,15分钟以上。

插件市场地址

jade-mp-privacy小程序新隐私政策插件

继续阅读 »

简单的说一下能解决 什么问题呢?

首先,uniapp目前还没有同步更新微信小程序新隐私政策的button属性和api接口。
然后,经过查阅文档和社区,再加上不断踩坑,总结出来的一个uniapp官方没有更新前的一个临时解决方案。

首先你的确保你了解过微信小程序的新隐私政策

小程序新版隐私政策

这个就要求必须要先在小程序隐私政策中添加相关隐私接口信息,通过审核并且等待其真实生效后,才能调用。这个生效时间大概在审核通过后,15分钟以上。

插件市场地址

jade-mp-privacy小程序新隐私政策插件

收起阅读 »

vue3 cli es6转es5

vue_cli 兼容性 浏览器兼容 h5

用各种方法legacyPlugin、babel、polyfill(polyfill解释不了可选链)等等、都转不了,在旧版本浏览器上报错
?. 、import.meta等等

官方又说自带es6转es5,又跑去下载老版本的hbuilderX,搞这搞那,没有任何作用,非常抓狂

最后发现uniapp自己在编译时带了legacyPlugin,并且可以配置,问题解决

vite.config.ts

        uni({  
            viteLegacyOptions: {  
                targets: ['Chrome > 70']  
            }  
        })

官方文档没有任何提及,这方法还是突发奇想,点到uni里面看抛出的ts才看到并尝试的,并且刚巧build了一版发到服务器上试、因为这个编译只在build时生效,特么开发模式下该报错还是报错,这让我怎么测试、心态都崩了。。

DEBUG全靠猜,唉~

继续阅读 »

用各种方法legacyPlugin、babel、polyfill(polyfill解释不了可选链)等等、都转不了,在旧版本浏览器上报错
?. 、import.meta等等

官方又说自带es6转es5,又跑去下载老版本的hbuilderX,搞这搞那,没有任何作用,非常抓狂

最后发现uniapp自己在编译时带了legacyPlugin,并且可以配置,问题解决

vite.config.ts

        uni({  
            viteLegacyOptions: {  
                targets: ['Chrome > 70']  
            }  
        })

官方文档没有任何提及,这方法还是突发奇想,点到uni里面看抛出的ts才看到并尝试的,并且刚巧build了一版发到服务器上试、因为这个编译只在build时生效,特么开发模式下该报错还是报错,这让我怎么测试、心态都崩了。。

DEBUG全靠猜,唉~

收起阅读 »

今天下午发生一个诡异的问题,不同分类的翻页参数不重新初始化,而是选择加 1

不知道各位有没有收到反馈,我这边至少有 4 台设备发现了这样的形状,页面中 tab 切换分类的时候,翻页的参数选择了点击+1,而不是初始化;还在查代码的时候,有恢复了正常。
难道 uniapp 公司能远控?

不知道各位有没有收到反馈,我这边至少有 4 台设备发现了这样的形状,页面中 tab 切换分类的时候,翻页的参数选择了点击+1,而不是初始化;还在查代码的时候,有恢复了正常。
难道 uniapp 公司能远控?

微信小程序隐私协议最新弹框解决方案

隐私协议 微信小程序

公众号文章:
https://mp.weixin.qq.com/s?__biz=MzIyNjE5ODA5NA==&mid=2247487487&idx=1&sn=36269ceb84a1ffb0a91f10a711b274cb&chksm=e87558dedf02d1c867f0a9fad1344d7bd7dc5542849543caf824051d56b89763b9a3e242efca#rd

代码片段:
https://developers.weixin.qq.com/s/VGANOSmb7VKl

继续阅读 »

公众号文章:
https://mp.weixin.qq.com/s?__biz=MzIyNjE5ODA5NA==&mid=2247487487&idx=1&sn=36269ceb84a1ffb0a91f10a711b274cb&chksm=e87558dedf02d1c867f0a9fad1344d7bd7dc5542849543caf824051d56b89763b9a3e242efca#rd

代码片段:
https://developers.weixin.qq.com/s/VGANOSmb7VKl

收起阅读 »

【解决】uni.scanCode苹果(ios)黑屏,真机测试扫码黑屏问题

扫码

hbuilderx版本:3.5.3

原因:打包会使用新版本的sdk来打包

解决方式1:在manifest.json源码视图里面一下地方加入Barcode和Camera

{  
    "app-plus" : {  
        "modules" : {  
            "Barcode" : {},  
            "Camera" : {}  
        }  
    }  
}

解决方式2:升级hbuilderx版本,勾选以下两个

↓↓↓ 各位大佬点点赞

继续阅读 »

hbuilderx版本:3.5.3

原因:打包会使用新版本的sdk来打包

解决方式1:在manifest.json源码视图里面一下地方加入Barcode和Camera

{  
    "app-plus" : {  
        "modules" : {  
            "Barcode" : {},  
            "Camera" : {}  
        }  
    }  
}

解决方式2:升级hbuilderx版本,勾选以下两个

↓↓↓ 各位大佬点点赞

收起阅读 »

【TabBar】根据角色展示不同的数量或内容解决方案

tabbar

官方文档:https://uniapp.dcloud.net.cn/api/ui/tabbar.html#settabbaritem

看不懂的看我的解决方案:

1、pages.json里面按照要求配置好最全数量的tabbar,一定要按照最大数量配置,切记!!!并且此时对应的tabbar页面是公共的tabbar(最大数量为5个)例如ont,two,three。

2、将不同角色的页面提前创建好,写好自己的业务内容,此页面无需在 pages.json 中配置,作为一个组件引入即可。

3、在所有进入tabbar页面的url处一定要处理好标识,比如A角色=1,B角色=2。然后使用 switchTab 跳转对应的tabbar公共页面。

4、在公共的tabbar页面根据角色标识判断展示对应的组件(此组件为第2步创建的页面)。

5、在所有公共的tabbar页面的 onShow 函数中处理tabbar,以下是我的伪代码:

<script setup name="">  
import { onShow } from '@dcloudio/uni-app';  
import storage from '@/common/utils/storage.js';  

onShow(() => {  
    console.log(storage.getStorageSync('role'));  
    uni.setTabBarItem({  
        index: 0,  
        text: 'Home',  
        // pagePath: '/pages/tabbar/tea-home',  
        iconPath: '/static/images/tabbar/home.png',  
        selectedIconPath: '/static/images/tabbar/home-active.png',  
        complete: (e) => {  
            console.log('======= Home', e);  
        }  
    });  
});  
</script>

6、关于我为什么不使用 pagePath 这个属性直接替代页面,有三点给大家解释下:第一点:H5页面完全失效,刷新会失去tabbar;第二点:APP中系统杀死APP后再次进入会丢失tabbar;第三点:如果是自定义tabbar会有闪烁的情况。

7、大家也可以尝试其他方案,这只是本人遇到的问题及解决思路。

继续阅读 »

官方文档:https://uniapp.dcloud.net.cn/api/ui/tabbar.html#settabbaritem

看不懂的看我的解决方案:

1、pages.json里面按照要求配置好最全数量的tabbar,一定要按照最大数量配置,切记!!!并且此时对应的tabbar页面是公共的tabbar(最大数量为5个)例如ont,two,three。

2、将不同角色的页面提前创建好,写好自己的业务内容,此页面无需在 pages.json 中配置,作为一个组件引入即可。

3、在所有进入tabbar页面的url处一定要处理好标识,比如A角色=1,B角色=2。然后使用 switchTab 跳转对应的tabbar公共页面。

4、在公共的tabbar页面根据角色标识判断展示对应的组件(此组件为第2步创建的页面)。

5、在所有公共的tabbar页面的 onShow 函数中处理tabbar,以下是我的伪代码:

<script setup name="">  
import { onShow } from '@dcloudio/uni-app';  
import storage from '@/common/utils/storage.js';  

onShow(() => {  
    console.log(storage.getStorageSync('role'));  
    uni.setTabBarItem({  
        index: 0,  
        text: 'Home',  
        // pagePath: '/pages/tabbar/tea-home',  
        iconPath: '/static/images/tabbar/home.png',  
        selectedIconPath: '/static/images/tabbar/home-active.png',  
        complete: (e) => {  
            console.log('======= Home', e);  
        }  
    });  
});  
</script>

6、关于我为什么不使用 pagePath 这个属性直接替代页面,有三点给大家解释下:第一点:H5页面完全失效,刷新会失去tabbar;第二点:APP中系统杀死APP后再次进入会丢失tabbar;第三点:如果是自定义tabbar会有闪烁的情况。

7、大家也可以尝试其他方案,这只是本人遇到的问题及解决思路。

收起阅读 »

uniapp+uniCloud全栈开发小程序总结,效率的确是快

前端


界面
vue语法配合flex布局,轻松完成界面开发。

服务端


相信对前端工程师来说,以前需要做全栈开发的话,需要硬着头皮学一门后端语言。uniCloud的出现,让前端开发可以使用熟悉的javascript语言来做后端服务开发,本次小程序的试车,就体验了一把uniCloud的方便快捷。

1、关于数据库
uniCloud提供了一个 JSON 格式的文档型数据库。顾名思义,数据库中的每条记录都是一个 JSON 格式的文档。
每张表/集合,都有一个表名*.schema.json的文件,来描述表的信息、字段的信息。可以很方便的定义表的字段、字段类型、表的权限和字段的权限。
做项目常用的表格官方已经提供了很多openDB模板,直接添加就可以了。

2、服务端配置文件
uniCloud采用的是uni-config-center公共模块,所有需要进行配置的信息都可以在此模块下进行配置,例如用户体系的uni-id.需要获取配置信息的时候,在云函数内require就可以了。

3、第三方凭据管理
以前做小程序开发的时候,获取ticket、accessToken之类的凭据比较繁琐,uniCloud提供了uni-open-bridge模块来自动管理这些凭据,包含uni-open-bridge云对象、uni-open-bridge-common公共模块和官方提供的opendb-open-data数据表。uni-open-bridge部署后会自动获取例如微信小程序的凭据并存储到opendb-open-data表内,在做相关逻辑编码需要用到这些凭据的时候,直接调用uni-open-bridge-common提供的api来获取凭据就OK了。

4、订阅消息
小程序比较重要的一个功能是消息订阅,uniCloud提供了uni-subscribemsg公共模块来进行订阅消息的发送,方便快捷。

5、用户管理
开发任何应用,用户的登陆、注册、资料编辑等等是不可避免且重复的,且现在用到第三方登陆的场景可以说是必须的了,例如微信登陆、手机号一键登陆等等。
使用uni-id-pages来维护管理用户的登陆,界面、后端逻辑、token的维护都不需要开发者操心了,连数据库都不需要新建,官方提供的uni-id-users表格满足所有的登陆需求。

6、关于token
在uni-id-pages模块下包含了uni-id-common公共模块,token的生成、刷新、校验是依靠这个模块来完成的,具体使用可查看文档。使用uni-id-pages模块后,token的维护不用手写代码,了解原理即可。

7、服务端逻辑
要写具体的服务逻辑,创建云函数上传至云空间部署运行即可,前端通过uniCloud.callFunction来调用具体的云函数就能前后端联调了。

8、定时任务
定时任务是比较常见的功能,使用云函数定时触发器。已配置定时触发器的云函数,会在相应时间点被自动触发,函数的返回结果不会返回给调用方。
.......

总结:
这次开发小程序,发行了微信小程序和头条小程序两个版本,总的来说效率是杠杠的,只要仔细看文档,不懂的查查资料和多提问,都能很快搞定需求,uniapp+uniCloud的确是一个很好的创新,前端工程师也可以全栈搞定项目的开发,对自身的职业发展有很大的好处,平时也可以兼职做做项目赚点外快。

继续阅读 »

前端


界面
vue语法配合flex布局,轻松完成界面开发。

服务端


相信对前端工程师来说,以前需要做全栈开发的话,需要硬着头皮学一门后端语言。uniCloud的出现,让前端开发可以使用熟悉的javascript语言来做后端服务开发,本次小程序的试车,就体验了一把uniCloud的方便快捷。

1、关于数据库
uniCloud提供了一个 JSON 格式的文档型数据库。顾名思义,数据库中的每条记录都是一个 JSON 格式的文档。
每张表/集合,都有一个表名*.schema.json的文件,来描述表的信息、字段的信息。可以很方便的定义表的字段、字段类型、表的权限和字段的权限。
做项目常用的表格官方已经提供了很多openDB模板,直接添加就可以了。

2、服务端配置文件
uniCloud采用的是uni-config-center公共模块,所有需要进行配置的信息都可以在此模块下进行配置,例如用户体系的uni-id.需要获取配置信息的时候,在云函数内require就可以了。

3、第三方凭据管理
以前做小程序开发的时候,获取ticket、accessToken之类的凭据比较繁琐,uniCloud提供了uni-open-bridge模块来自动管理这些凭据,包含uni-open-bridge云对象、uni-open-bridge-common公共模块和官方提供的opendb-open-data数据表。uni-open-bridge部署后会自动获取例如微信小程序的凭据并存储到opendb-open-data表内,在做相关逻辑编码需要用到这些凭据的时候,直接调用uni-open-bridge-common提供的api来获取凭据就OK了。

4、订阅消息
小程序比较重要的一个功能是消息订阅,uniCloud提供了uni-subscribemsg公共模块来进行订阅消息的发送,方便快捷。

5、用户管理
开发任何应用,用户的登陆、注册、资料编辑等等是不可避免且重复的,且现在用到第三方登陆的场景可以说是必须的了,例如微信登陆、手机号一键登陆等等。
使用uni-id-pages来维护管理用户的登陆,界面、后端逻辑、token的维护都不需要开发者操心了,连数据库都不需要新建,官方提供的uni-id-users表格满足所有的登陆需求。

6、关于token
在uni-id-pages模块下包含了uni-id-common公共模块,token的生成、刷新、校验是依靠这个模块来完成的,具体使用可查看文档。使用uni-id-pages模块后,token的维护不用手写代码,了解原理即可。

7、服务端逻辑
要写具体的服务逻辑,创建云函数上传至云空间部署运行即可,前端通过uniCloud.callFunction来调用具体的云函数就能前后端联调了。

8、定时任务
定时任务是比较常见的功能,使用云函数定时触发器。已配置定时触发器的云函数,会在相应时间点被自动触发,函数的返回结果不会返回给调用方。
.......

总结:
这次开发小程序,发行了微信小程序和头条小程序两个版本,总的来说效率是杠杠的,只要仔细看文档,不懂的查查资料和多提问,都能很快搞定需求,uniapp+uniCloud的确是一个很好的创新,前端工程师也可以全栈搞定项目的开发,对自身的职业发展有很大的好处,平时也可以兼职做做项目赚点外快。

收起阅读 »