问题总结
- jsapi在哪里安装?
- 安装之后一引入就报错?
- 无法真机调试?
- 真机调试后一直显示 加载中?
- 子组件无法触发 click 事件?
小程序中 ios 标题显示偏上,安卓正常?- 小程序中,嵌套子组件中 onPageScroll、onReachBotton无法正常触发?
- v-show 小程序无效?
- tabBar 页面在切换回来之后响应式失效?
- 专有钉钉上 ios 环境下,打开提示 “服务暂不可用,请稍后再试”?
- 真机调试时候使用 uView 组件报错?
- 基于 uni-popup 弹框封装一个多选框,当使用蒙版关闭的时候,无法正常关闭
- ios环境下、正式环境(浙政钉)里面使用小程序在input点击完成时无法隐藏键盘?
- 上传正式版本(浙政钉)的时候,开发工具显示成功,但是正式环境没有获取到?
问题说明:因为我使用uniapp 开发小程序是同时包含了 钉钉、浙政钉 俩套所以我遇到的问题都写在一起了。然后删除线的问题是我没有解决的问题
1.jsApi在哪里安装?
钉钉小程序 jsApi ,我在使用的时候在官方文档中一直都没有找到 jsApi 的安装方法,后面我在 H5微应用 文档中找到了安装命令:
npm install dingtalk-jsapi --save
你敢相信,整个小程序文档中只有教你是用 jsApi 但是一点点教你安装命令都没有告诉你,所以在这里我搞了好久才好。
直到后来,我的小程序开发了一半了之后我有幸了解到 小程序的 jsApi 是内置的不需要额外的安装,除非你要使用 H5 的一些功能才需要去单独去安装 jsApi
2.安装之后一引入就报错?
接着第一个问题
,手动安装之后我安装官方的用法引入。单单光引入就报错。Function(...) is not a function
, 我人傻了。这TM都报错。后面反复实验得到解决办法
uniapp 项目不要使用 V3 版本,在创建项目的时候使用 V2 版本就不会报错了
。具体为什么 V3 报错。这就不知道了
3.无法真机调试?
在写 专有钉钉小程序 的时候无法真机调试。
解决办法: 开发工具中要使用 单独的 mPaaS 模块,然后再白名单中配置自己 id就可以了
。
4.真机调试后一直显示 加载中?
这个比较重要
先说明下为什么这个重要:
1.
本地真机调试的时候一直都是 loading 加载中,无法使用和调试
2.
我新来这个公司后发现,以前的老项目都是把钉钉小程序和浙政钉小程序分成俩套代码来写。其中:钉钉是 uniapp项目、浙政钉是原生的项目。我咨询后发现因为之前 uniapp项目部署到浙政钉后一直显示 loading 加载中。无法使用
解决办法:
1.在真机调试的时候需要把小程序右上角 详情打开,然后关闭 2.0基础库,再去调试
2.在项目构建的时候 pages.json 文件的 pages 数组的第一个启动页的 路径(path) 一定要保持 pages/index/index 一定一定一定!!! 这样在你部署到浙政钉的时候就不会出现加载中了
5.子组件无法触发click事件?
我在使用模块化开发的时候发现,子组件无法触发click事件。解决办法:
查看子组件是否在 pages.json文件中 被注册成路由了,我把路由删掉就可以正常触发事件了
我出现这个问题的原因是:uniapp在新建页面的时候会自动在 pages.json 文件中注册,下次创建组件的时候注意:把这个选项取消
6.小程序中 ios 的标题偏上,安卓正常?
这个问题没有手动解决
ios 中页面的标题显示在中线的偏上,我没有解决后续自己好了,我还不知道为什么会出现这个情况?和怎么解决?
7.小程序中,嵌套子组件中 onPageScroll、onReachBotton无法正常触发?
这个问题没有深入研究
我个人使用了 <scroll-view/>
标签包裹了一下,使用 @scrolltolower
事件来处理触底加载
8.v-show 小程序无效?
我在 image
等标签中使用 v-show
指令无效,在 view
可以正常使用
解决办法:
1.我最后在标签中写了动态的 style
来手动控制它的显示隐藏。v-if也是可以用,但是因为我需要频繁操作,所以我是自己手动来控制的。(推荐第一种,因为第二种在某种布局状态下也会失效
)
2.在需要隐藏的标签外面包裹一层 view 标签,然后在 view 标签上面使用 v-show。
9.tabBar 页面在切换回来之后响应式失效?
这个属于我自己第一次开发uniapp导致的失误性BUG
前提知识: 在小程序中 tabBar 页面是不会销毁和重新挂载的
问题原因: 因为我自己想让它切换回来后能重新挂载和渲染。这样不用自己手动初始化。所以我在 onHidden 生命周期中使用了$destroy()
。但是切换回来仍然没有重新挂载和渲染,并且还导致了,页面失去了响应式。
解决办法: 把$destroy()
删除掉就恢复了,但是需要注意,后续需要自己在 onShow
里面把 data
给初始化一遍。
10.专有钉钉上 ios 环境下,打开提示 “服务暂不可用,请稍后再试”?
首先强调一下,只有在 特定环境(专有钉钉模式ios真机)下才会出现这个提示。
问题原因: 在项目中没有配置原生的 tabBar 属性
导致这个问题出现。其它环境目前正常
解决办法: 就是使用原生的 tabBar 属性来配置。如果你的项目没有导航栏(tabBar),目前没有找到解决办法,但是小程序基本都需要导航栏吧。
11.真机调试时候使用 uView 组件报错?
首先强调一下,特定的发生情况 1. 真机调试或者预览 2. 使用了uView 的文本域的组件
在第 4
条中,明确指出,真机调试需要关闭 2.0 组件库然后在去调试。本来很正常的程序当你取消勾选之后 uView 中的 文本域(Textarea)组件就会报错。
前提知识:在uView 官网明确指出:由于在 nvue 下,u-textarea 名称被uni-app官方占用,在 nvue 页面中请使用 u--textarea 名称,在 vue 页面中使用 u--textarea 或者 u-textarea 均可
解决办法: 在使用的时候 把 u--
textarea 换成 u-
textarea 写法。
12.基于 uni-popup 弹框封装一个多选框,当使用蒙版关闭的时候,无法正常关闭
因业务需要多选框,又没有找到合适的多选框组件自己就简单封装了一下。后续有时间会完善整个多选框组件
问题原因: uni-popup 弹框层在点击蒙版关闭的时候会再次打开。多次实验得出结果,是因为 uni-popup 这个官方组件没有做 阻止事件冒泡
。然后又恰巧我的打开事件是写在 弹框 父元素上的。蒙版关闭的时候,冒泡到了父组件又再次打开了弹框。(如下图:我把事件放在了父元素上了)
解决办法: 在弹框同级写打开事件。主要是不要在弹框父元素写打开事件(@click => onTap)
后续计划: 1.准备把弹框和用户显示做成一个完整的一个组件。2. 优化弹框大数据
不卡顿。3.增加支持分页获取数据
13.ios环境下、正式环境(浙政钉)里面使用小程序在input点击完成时无法隐藏键盘?
先讲一下问题发生的环境 1.ios 2.浙政钉 3.输入框(包括普通input、数字、文本)
问题原因: 无论使用原生的组件input 还是使用 uniapp 封装的组件在用户输入之后点击完成
按钮时无法隐藏键盘,因为这些组件使用的是原生的键盘,原生的在组件封装的时候交互存在问题
解决办法:
1.
在点击完成时加入一个监听事件使用 隐藏键盘 api 来完成
<textarea @confirm="confirm" laceholder="请输入事件描述" />
confirm() {
dd.hideKeyboard();
uni.hideKeyboard();
},
2.
在输入框组件中添加 :enableNative="false"
属性即可。下图为官网说明 强烈推荐
官网说明链接
如果不放心可以俩种结合使用,目前自己使用第2种完全够用
注意
当输入框为数字键盘的时候依然会出现无法隐藏的情况,目前本人用 type="text" 代替。有没有懂得大佬讲一下解决办法
14.上传正式版本(浙政钉)的时候,开发工具显示成功,但是正式环境没有获取到?
开发的时候上传完成,然后找工作人员更新的时候却一直无法获取到更新的正式版本,经过尝试和工作人员的沟通发现是开发工具版本的问题(自己保持怀疑,但是确实解决了问题)
解决办法: 开发工具使用 2.x
版本,本人目前使用 2.3.4
不知道现在这个问题改好了没有