HBuilderX 2.7.5+版本,支持注释模板同步时间
HBuilderX 2.7.5+版本起,支持主持注释模板同步时间
如下动画所示:
说明
点击菜单【工具】【代码块设置】【javascript代码块】,输入如下内容:
{
"method-annotation": {
"prefix": "anno",
"body": [
"/**",
" * 方法说明",
" * author: 佚名",
" * description: ",
" * @param $1",
" * @return $2",
" * @createTime: $DATE_TIME",
" */"
],
"triggerAssist": false,
"description": "method annotation"
}
}
HBuilderX 2.7.5+版本起,支持主持注释模板同步时间
如下动画所示:
说明
点击菜单【工具】【代码块设置】【javascript代码块】,输入如下内容:
{
"method-annotation": {
"prefix": "anno",
"body": [
"/**",
" * 方法说明",
" * author: 佚名",
" * description: ",
" * @param $1",
" * @return $2",
" * @createTime: $DATE_TIME",
" */"
],
"triggerAssist": false,
"description": "method annotation"
}
}
收起阅读 »
uni-app高分开源电影项目源码案例分析
项目特点
- 代码编写简洁,注释清晰,快速入门必备;
- 支持在线模糊搜索;
- 程序类目懒加载,支持在线播放预告片;
- 更好的App跨平台框架、更方便的H5开发框架,加载新页面速度更快;
- 一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。
扫码预览
启动准备
小程序账号及微信开发者工具: https://mp.weixin.qq.com
建议编辑器:HBuilderX
小程序启动可能会遇到问题:
-
HBuilderX报错:微信开发者工具拒绝HBuilderX访问端口
答:微信开发者工具 -- 设置 -- 安全设置,点击开启服务端口即可解决。
-
小程序报错:不在以下 request 合法域名列表中
答:这是因为在小程序中发起了wx.request请求,但是请求的域名没有在微信公众平台后台设置,管理员将需要使用的域名添加到小程序后台,(调试时可以点击微信开发者工具右上角 详情 -- 本地设置 -- 勾选不校验合法域名 ,可暂时取消报错)。
-
小程序报错:Failed to load media http://xxx.xx server responded with a status of 403
答:这是小程序电影详情页面的预告片视频报错(不影响可忽略此错误),并不是加载视频错误,而是微信开发者工具中加载视频会提示这个错误,所以在调试带有视频的控件时,可以点击真机预览小程序。
部分源码示例
<template>
<view class="container">
<!-- loading动画 -->
<mi-loading ref="loading" title="加载中" :hasMask="true"></mi-loading>
<view style="background-color: #CAF2F2">
<cu-custom :isBack="true">
<block slot="backText"> </block>
<block slot="content" class="tarbar">搜索</block>
</cu-custom>
</view>
<scroll-view>
<view class="topBar">
<image src="~@/static/img/search.jpeg" mode="widthFix" class="response"></image>
<view class="searchBox">
<input class="search-t" placeholder="请输入关键字搜索" @input="messagesearch"></input>
<view class="button" @click="getInfo">Go
<view class="t"></view>
</view>
</view>
</view>
<!-- 电影列表 -->
<view class="movieH">搜索结果</view>
<view class="movieBox">
<view v-for="(item, index) in movieInfo" :key="index" class="movieList" @click="getDate(item)">
<image :src="item.img" class="movieImg"></image>
<view>
{{ item.title | ellipsis }}
<view class="moiveRate">
<!-- <uni-rate disabled="true" :value="item.rating.average/2" size=14 active-color="#D81E06" color="#DADADA">
</uni-rate> -->
<text class="moiveRateT"></text>
</view>
</view>
</view>
</view>
<uni-load-more :status="listStatus" :contentText="contentText" v-if="loadStatu"></uni-load-more>
</scroll-view>
</view>
</template>
项目特点
- 代码编写简洁,注释清晰,快速入门必备;
- 支持在线模糊搜索;
- 程序类目懒加载,支持在线播放预告片;
- 更好的App跨平台框架、更方便的H5开发框架,加载新页面速度更快;
- 一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。
扫码预览
启动准备
小程序账号及微信开发者工具: https://mp.weixin.qq.com
建议编辑器:HBuilderX
小程序启动可能会遇到问题:
-
HBuilderX报错:微信开发者工具拒绝HBuilderX访问端口
答:微信开发者工具 -- 设置 -- 安全设置,点击开启服务端口即可解决。
-
小程序报错:不在以下 request 合法域名列表中
答:这是因为在小程序中发起了wx.request请求,但是请求的域名没有在微信公众平台后台设置,管理员将需要使用的域名添加到小程序后台,(调试时可以点击微信开发者工具右上角 详情 -- 本地设置 -- 勾选不校验合法域名 ,可暂时取消报错)。
-
小程序报错:Failed to load media http://xxx.xx server responded with a status of 403
答:这是小程序电影详情页面的预告片视频报错(不影响可忽略此错误),并不是加载视频错误,而是微信开发者工具中加载视频会提示这个错误,所以在调试带有视频的控件时,可以点击真机预览小程序。
部分源码示例
<template>
<view class="container">
<!-- loading动画 -->
<mi-loading ref="loading" title="加载中" :hasMask="true"></mi-loading>
<view style="background-color: #CAF2F2">
<cu-custom :isBack="true">
<block slot="backText"> </block>
<block slot="content" class="tarbar">搜索</block>
</cu-custom>
</view>
<scroll-view>
<view class="topBar">
<image src="~@/static/img/search.jpeg" mode="widthFix" class="response"></image>
<view class="searchBox">
<input class="search-t" placeholder="请输入关键字搜索" @input="messagesearch"></input>
<view class="button" @click="getInfo">Go
<view class="t"></view>
</view>
</view>
</view>
<!-- 电影列表 -->
<view class="movieH">搜索结果</view>
<view class="movieBox">
<view v-for="(item, index) in movieInfo" :key="index" class="movieList" @click="getDate(item)">
<image :src="item.img" class="movieImg"></image>
<view>
{{ item.title | ellipsis }}
<view class="moiveRate">
<!-- <uni-rate disabled="true" :value="item.rating.average/2" size=14 active-color="#D81E06" color="#DADADA">
</uni-rate> -->
<text class="moiveRateT"></text>
</view>
</view>
</view>
</view>
<uni-load-more :status="listStatus" :contentText="contentText" v-if="loadStatu"></uni-load-more>
</scroll-view>
</view>
</template>
uni-app高分开源电影项目源码案例分析
项目特点
- 代码编写简洁,注释清晰,快速入门必备;
- 支持在线模糊搜索;
- 程序类目懒加载,支持在线播放预告片;
- 更好的App跨平台框架、更方便的H5开发框架,加载新页面速度更快;
- 一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。
扫码预览
启动准备
小程序账号及微信开发者工具: https://mp.weixin.qq.com
建议编辑器:HBuilderX
小程序启动可能会遇到问题:
-
HBuilderX报错:微信开发者工具拒绝HBuilderX访问端口
答:微信开发者工具 -- 设置 -- 安全设置,点击开启服务端口即可解决。
-
小程序报错:不在以下 request 合法域名列表中
答:这是因为在小程序中发起了wx.request请求,但是请求的域名没有在微信公众平台后台设置,管理员将需要使用的域名添加到小程序后台,(调试时可以点击微信开发者工具右上角 详情 -- 本地设置 -- 勾选不校验合法域名 ,可暂时取消报错)。
-
小程序报错:Failed to load media http://xxx.xx server responded with a status of 403
答:这是小程序电影详情页面的预告片视频报错(不影响可忽略此错误),并不是加载视频错误,而是微信开发者工具中加载视频会提示这个错误,所以在调试带有视频的控件时,可以点击真机预览小程序。
部分源码示例
<template>
<view class="container">
<!-- loading动画 -->
<mi-loading ref="loading" title="加载中" :hasMask="true"></mi-loading>
<view style="background-color: #CAF2F2">
<cu-custom :isBack="true">
<block slot="backText"> </block>
<block slot="content" class="tarbar">搜索</block>
</cu-custom>
</view>
<scroll-view>
<view class="topBar">
<image src="~@/static/img/search.jpeg" mode="widthFix" class="response"></image>
<view class="searchBox">
<input class="search-t" placeholder="请输入关键字搜索" @input="messagesearch"></input>
<view class="button" @click="getInfo">Go
<view class="t"></view>
</view>
</view>
</view>
<!-- 电影列表 -->
<view class="movieH">搜索结果</view>
<view class="movieBox">
<view v-for="(item, index) in movieInfo" :key="index" class="movieList" @click="getDate(item)">
<image :src="item.img" class="movieImg"></image>
<view>
{{ item.title | ellipsis }}
<view class="moiveRate">
<!-- <uni-rate disabled="true" :value="item.rating.average/2" size=14 active-color="#D81E06" color="#DADADA">
</uni-rate> -->
<text class="moiveRateT"></text>
</view>
</view>
</view>
</view>
<uni-load-more :status="listStatus" :contentText="contentText" v-if="loadStatu"></uni-load-more>
</scroll-view>
</view>
</template>
项目特点
- 代码编写简洁,注释清晰,快速入门必备;
- 支持在线模糊搜索;
- 程序类目懒加载,支持在线播放预告片;
- 更好的App跨平台框架、更方便的H5开发框架,加载新页面速度更快;
- 一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。
扫码预览
启动准备
小程序账号及微信开发者工具: https://mp.weixin.qq.com
建议编辑器:HBuilderX
小程序启动可能会遇到问题:
-
HBuilderX报错:微信开发者工具拒绝HBuilderX访问端口
答:微信开发者工具 -- 设置 -- 安全设置,点击开启服务端口即可解决。
-
小程序报错:不在以下 request 合法域名列表中
答:这是因为在小程序中发起了wx.request请求,但是请求的域名没有在微信公众平台后台设置,管理员将需要使用的域名添加到小程序后台,(调试时可以点击微信开发者工具右上角 详情 -- 本地设置 -- 勾选不校验合法域名 ,可暂时取消报错)。
-
小程序报错:Failed to load media http://xxx.xx server responded with a status of 403
答:这是小程序电影详情页面的预告片视频报错(不影响可忽略此错误),并不是加载视频错误,而是微信开发者工具中加载视频会提示这个错误,所以在调试带有视频的控件时,可以点击真机预览小程序。
部分源码示例
<template>
<view class="container">
<!-- loading动画 -->
<mi-loading ref="loading" title="加载中" :hasMask="true"></mi-loading>
<view style="background-color: #CAF2F2">
<cu-custom :isBack="true">
<block slot="backText"> </block>
<block slot="content" class="tarbar">搜索</block>
</cu-custom>
</view>
<scroll-view>
<view class="topBar">
<image src="~@/static/img/search.jpeg" mode="widthFix" class="response"></image>
<view class="searchBox">
<input class="search-t" placeholder="请输入关键字搜索" @input="messagesearch"></input>
<view class="button" @click="getInfo">Go
<view class="t"></view>
</view>
</view>
</view>
<!-- 电影列表 -->
<view class="movieH">搜索结果</view>
<view class="movieBox">
<view v-for="(item, index) in movieInfo" :key="index" class="movieList" @click="getDate(item)">
<image :src="item.img" class="movieImg"></image>
<view>
{{ item.title | ellipsis }}
<view class="moiveRate">
<!-- <uni-rate disabled="true" :value="item.rating.average/2" size=14 active-color="#D81E06" color="#DADADA">
</uni-rate> -->
<text class="moiveRateT"></text>
</view>
</view>
</view>
</view>
<uni-load-more :status="listStatus" :contentText="contentText" v-if="loadStatu"></uni-load-more>
</scroll-view>
</view>
</template>
Ystar优秀应用招募活动正式启动,30000元现金大奖等你来拿!
活动背景介绍
Ystar是区块链世界的流量池——基于对区块链技术和思想的深刻理解,通过安全易用的去中心化密钥管理黑科技,削平区块链进入门槛,将全球44亿互联网用户导流到区块链世界。Ystar对区块链行业的价值,就犹如浏览器对互联网行业的价值。
Ystar是互联网世界的升级通道——利用通证经济改造生产关系,让用户的时间价值回归用户,让数字主权真正属于用户自己,并升级广告投放效率,打破超级平台垄断,从而激活数字生态的活力。
Ystar上线4周便获得20万KYC用户(即完成身份认证+人脸识别的用户)的青睐,且收获广告营收,成功验证商业模式。此次应用招募活动旨在吸引优秀应用入驻Ystar,并通过Ystar拓展流量分发渠道,帮助优秀应用获得更多受众。
活动细则
1. 活动方式
A.提交应用得奖励
- 本次活动将根据提交的应用名单择优上线至Ystar,提供免费应用分发服务,并在上线名单中挑选不多于50个应用,且给予每个应用100元奖励;
- 每个开发者可提交多个应用,不设上限;
- 应用提交时间:2020年5月18日至6月7日;
- 奖励名单将在活动结束后5个工作日内公布。
B.参与应用受欢迎度评选赢奖金 - 所有经官方审核并发布的应用均可报名参与最受欢迎应用评选活动;
- 报名时间为6月15日-6月19日;
- 评选活动时间为6月20日-7月20日;
- 评选规则:平台根据应用点击量、平台规则评价综合权重(如应用收藏量等)打分,评选优质应用;
- 活动奖励:
一等奖:3万元
二等奖:2万元
三等奖:1万元 - 获奖名单将在活动结束后的5个工作日内公布。
2. 应用提交方式
参照以下模板将每个应用简单介绍(不限于应用特色、使用帮助、玩法、用户量、DAU、MAU等数据)投递至邮箱fanli@ystar.io;
*邮件模板:
邮件标题:应用名称 应用类型 用户总数 DAU
邮件内容:
*本次活动暂限H5应用参加。
3. 应用分类
Ystar将优先发布游戏类,短视频类,直播类,社交类应用;
开发者可提供任意类型应用,包括但不限于游戏、新闻资讯、电影/视听、短视频、直播、社交、阅读、漫画/搞笑、工具、旅行、理财、教育、丽人、健康、生活等。
4. 活动说明
- 入选评奖活动的应用,月点击量不低于20万;
- 本次活动禁止一切IP重复刷量、不同IP刷量、智能作弊、人工作弊等行为,一经发现取消评选资格,Ystar保留法律追究的权利;
- 活动奖励将在活动结束后15个工作日内发完完毕;
- 本活动最终解释权归YSTAR。
活动背景介绍
Ystar是区块链世界的流量池——基于对区块链技术和思想的深刻理解,通过安全易用的去中心化密钥管理黑科技,削平区块链进入门槛,将全球44亿互联网用户导流到区块链世界。Ystar对区块链行业的价值,就犹如浏览器对互联网行业的价值。
Ystar是互联网世界的升级通道——利用通证经济改造生产关系,让用户的时间价值回归用户,让数字主权真正属于用户自己,并升级广告投放效率,打破超级平台垄断,从而激活数字生态的活力。
Ystar上线4周便获得20万KYC用户(即完成身份认证+人脸识别的用户)的青睐,且收获广告营收,成功验证商业模式。此次应用招募活动旨在吸引优秀应用入驻Ystar,并通过Ystar拓展流量分发渠道,帮助优秀应用获得更多受众。
活动细则
1. 活动方式
A.提交应用得奖励
- 本次活动将根据提交的应用名单择优上线至Ystar,提供免费应用分发服务,并在上线名单中挑选不多于50个应用,且给予每个应用100元奖励;
- 每个开发者可提交多个应用,不设上限;
- 应用提交时间:2020年5月18日至6月7日;
- 奖励名单将在活动结束后5个工作日内公布。
B.参与应用受欢迎度评选赢奖金 - 所有经官方审核并发布的应用均可报名参与最受欢迎应用评选活动;
- 报名时间为6月15日-6月19日;
- 评选活动时间为6月20日-7月20日;
- 评选规则:平台根据应用点击量、平台规则评价综合权重(如应用收藏量等)打分,评选优质应用;
- 活动奖励:
一等奖:3万元
二等奖:2万元
三等奖:1万元 - 获奖名单将在活动结束后的5个工作日内公布。
2. 应用提交方式
参照以下模板将每个应用简单介绍(不限于应用特色、使用帮助、玩法、用户量、DAU、MAU等数据)投递至邮箱fanli@ystar.io;
*邮件模板:
邮件标题:应用名称 应用类型 用户总数 DAU
邮件内容:
*本次活动暂限H5应用参加。
3. 应用分类
Ystar将优先发布游戏类,短视频类,直播类,社交类应用;
开发者可提供任意类型应用,包括但不限于游戏、新闻资讯、电影/视听、短视频、直播、社交、阅读、漫画/搞笑、工具、旅行、理财、教育、丽人、健康、生活等。
4. 活动说明
- 入选评奖活动的应用,月点击量不低于20万;
- 本次活动禁止一切IP重复刷量、不同IP刷量、智能作弊、人工作弊等行为,一经发现取消评选资格,Ystar保留法律追究的权利;
- 活动奖励将在活动结束后15个工作日内发完完毕;
- 本活动最终解释权归YSTAR。
石家庄地区餐饮app 食堂点餐 自助点餐app制作
1石家庄地区餐饮 食堂点餐 自助点餐app制作
5顾客可以自助扫码点餐,
1就餐后线上支付或者线下支付
0服务员服务点餐,
3即时处理订单信息
3借助各类营销工具
1吸引更多顾客在线点餐或到店消费
0扫码买单,提高收银效率,提升消费体验
1打印二维码台卡,放置在门店收银台,
1顾客使用微信或支付宝扫一扫即可买单
9可成品 可定制
电话首写数字
1石家庄地区餐饮 食堂点餐 自助点餐app制作
5顾客可以自助扫码点餐,
1就餐后线上支付或者线下支付
0服务员服务点餐,
3即时处理订单信息
3借助各类营销工具
1吸引更多顾客在线点餐或到店消费
0扫码买单,提高收银效率,提升消费体验
1打印二维码台卡,放置在门店收银台,
1顾客使用微信或支付宝扫一扫即可买单
9可成品 可定制
电话首写数字
APP定制开发、APP项目定制开发专业项目开发
APP定制开发、APP项目定制开发专业项目开发
APP项目定制开发,UI设计图定制开发
一个全新的APP在定制开发的时候,一定要明确几点;
1.需求明确,明确功能需求以及大概的工期和报价;
2.原型图和UI设计图确认;
- 前端切图代码编写;
- 后台搭建,填充相关内容,进行测试;
- 上线前,把数据清空然后填充相关所有的内容,进行制作;
- 安排上线。
APP定制开发、APP项目定制开发专业项目开发
APP项目定制开发,UI设计图定制开发
一个全新的APP在定制开发的时候,一定要明确几点;
1.需求明确,明确功能需求以及大概的工期和报价;
2.原型图和UI设计图确认;
- 前端切图代码编写;
- 后台搭建,填充相关内容,进行测试;
- 上线前,把数据清空然后填充相关所有的内容,进行制作;
- 安排上线。
uniapp中使用全景图片查看器,查看全景VR图片
全景图片查看器,有了Three.js的支持,已经是很简单的东西,网络上相关的插件有很多,这里推荐几个:Panolens.js、Pano.js、photo-sphere-viewer.js,这些插件都是基于Three.js,我这次是用的是photo-sphere-viewer.js。
但是使用这些插件,都是H5端的,uniapp中不能直接用。但uniapp有个组件web-view,可以引入内部或外部的HTML,文档传送:web-view。那这样问题思路就很清晰了,写一个HTML,使用查看器插件,再在uniapp项目中使用web-view组件,将本地的HTML导入。。。很简单吧
而且,查看器的使用也是巨简单,
引入两个js文件,
写个放插件的div,js中new一个插件对象,放上全景图片路径,完事儿~~其他具体的参数请去熟读并背诵文档
接下来就是在uniapp项目中引入,阅读web-view文档,我们能看到:
说明HTML文件不是随便放的,有特定的文件路径
uni页面使用web-view:
这里弄好了,简单的demo就完成了,就可以去调试运行了
经测试,我的demo在H5端、模拟器、真机都可以运行使用,小程序端还有点兼容问题,
运行效果:由于查看器是H5的插件,所以demo效果在H5端调试效果最好,图片清晰度、运行速度以及查看器自带的一些功能都是H5端效果最好
总结就是:::①请熟读并背诵文档,②动手实操
全景图片查看器,有了Three.js的支持,已经是很简单的东西,网络上相关的插件有很多,这里推荐几个:Panolens.js、Pano.js、photo-sphere-viewer.js,这些插件都是基于Three.js,我这次是用的是photo-sphere-viewer.js。
但是使用这些插件,都是H5端的,uniapp中不能直接用。但uniapp有个组件web-view,可以引入内部或外部的HTML,文档传送:web-view。那这样问题思路就很清晰了,写一个HTML,使用查看器插件,再在uniapp项目中使用web-view组件,将本地的HTML导入。。。很简单吧
而且,查看器的使用也是巨简单,
引入两个js文件,
写个放插件的div,js中new一个插件对象,放上全景图片路径,完事儿~~其他具体的参数请去熟读并背诵文档
接下来就是在uniapp项目中引入,阅读web-view文档,我们能看到:
说明HTML文件不是随便放的,有特定的文件路径
uni页面使用web-view:
这里弄好了,简单的demo就完成了,就可以去调试运行了
经测试,我的demo在H5端、模拟器、真机都可以运行使用,小程序端还有点兼容问题,
运行效果:由于查看器是H5的插件,所以demo效果在H5端调试效果最好,图片清晰度、运行速度以及查看器自带的一些功能都是H5端效果最好
总结就是:::①请熟读并背诵文档,②动手实操
收起阅读 »聊天(IM)界面发消息滚动到底部
今天有小伙伴问我,制作(IM)聊天时,发送的聊天消息不能自动滚动,通过一些了算法,随后发现有一些问题,不是很好,问我有没有相关的好的方法。嗯嗯嗯,当然,我这确实有一个比较好的方法。具体如下
原理 利用 scroll-view的scroll-into-view属性
效果图 见附件
具体代码如下
<template>
<view class='test'>
<scroll-view :scroll-into-view="viewIndex" scroll-view scroll-with-animation='true' :style="{'box-sizing':'border-box', 'padding':'20rpx','height':'200rpx'}"
scroll-y="true" class="scroll-Y">
<!-- 具体聊天内容 -->
<view v-for="(c,i) in chatList" :key="i">
{{c}}
</view>
<!-- 可滚动到底部的view标签 -->
<view :id="'im_'+chatList.length" class="bottom"></view>
</scroll-view>
<view>
<button @click="add">添加一行内容</button>
</view>
</view>
</template>
<!-- 页面方法 -->
<script>
export default {
data() {
return {
viewIndex: '',
chatList: ['你好', '很好'], // 模拟消息记录 为演示滚动效果,此处只有简单的消息信息
}
},
methods: {
add() {
//模拟发消息添加一条记录
this.chatList[this.chatList.length] = "你添加了一行内容" + this.chatList.length;
this.viewIndex = "";
//设置viewIndex值,使聊天滚动到底部
this.$nextTick(() => {
this.viewIndex = "im_" + this.chatList.length;
})
}
},
}
</script>
<style scoped>
.bottom {
width: 100vw;
height: 20rpx;
}
</style>
今天有小伙伴问我,制作(IM)聊天时,发送的聊天消息不能自动滚动,通过一些了算法,随后发现有一些问题,不是很好,问我有没有相关的好的方法。嗯嗯嗯,当然,我这确实有一个比较好的方法。具体如下
原理 利用 scroll-view的scroll-into-view属性
效果图 见附件
具体代码如下
<template>
<view class='test'>
<scroll-view :scroll-into-view="viewIndex" scroll-view scroll-with-animation='true' :style="{'box-sizing':'border-box', 'padding':'20rpx','height':'200rpx'}"
scroll-y="true" class="scroll-Y">
<!-- 具体聊天内容 -->
<view v-for="(c,i) in chatList" :key="i">
{{c}}
</view>
<!-- 可滚动到底部的view标签 -->
<view :id="'im_'+chatList.length" class="bottom"></view>
</scroll-view>
<view>
<button @click="add">添加一行内容</button>
</view>
</view>
</template>
<!-- 页面方法 -->
<script>
export default {
data() {
return {
viewIndex: '',
chatList: ['你好', '很好'], // 模拟消息记录 为演示滚动效果,此处只有简单的消息信息
}
},
methods: {
add() {
//模拟发消息添加一条记录
this.chatList[this.chatList.length] = "你添加了一行内容" + this.chatList.length;
this.viewIndex = "";
//设置viewIndex值,使聊天滚动到底部
this.$nextTick(() => {
this.viewIndex = "im_" + this.chatList.length;
})
}
},
}
</script>
<style scoped>
.bottom {
width: 100vw;
height: 20rpx;
}
</style>
收起阅读 »
uniapp使用mockjs模拟数据,支持H5、微信小程序、APP
1.安装node服务,我采用的是koa2脚手架:
npm install -g koa-generator (全局安装一次就好)
2.新建项目(cd到某个盘符或者桌面创建)
koa2 -e 项目名称
3.npm install
4.npm install koa2-cors(配置允许本地跨域)
5.npm install mockjs --sava(安装mockjs)
6.在app.js文件里引入如下
const cors = require('koa2-cors')
app.use(cors()) //注意书写位置(模板写哪里就写哪里)
7、npm run dev (koa2端口号默认是3000)请用Network地址
8、记得在nodeServer执行npm install
1.安装node服务,我采用的是koa2脚手架:
npm install -g koa-generator (全局安装一次就好)
2.新建项目(cd到某个盘符或者桌面创建)
koa2 -e 项目名称
3.npm install
4.npm install koa2-cors(配置允许本地跨域)
5.npm install mockjs --sava(安装mockjs)
6.在app.js文件里引入如下
const cors = require('koa2-cors')
app.use(cors()) //注意书写位置(模板写哪里就写哪里)
7、npm run dev (koa2端口号默认是3000)请用Network地址
8、记得在nodeServer执行npm install
收起阅读 »pda的广播扫码uni-app
一直困惑在uni-app中实现pda的广播扫码功能,今天终于找到了一个解决方案。
方案就是做一个全局监听,只引入一次,来防止很多页面都引入了扫码的组件,造成多次扫描,数据出现多次
知识点:全局监听:官网的全局监听地址
uni.$emit:触发全局的自定事件。附加参数都会传给监听器回调。
uni.$on:监听全局的自定义事件。事件可以由 uni.$emit 触发,回调函数会接收所有传入事件触发函数的额外参数
uni.$off:移除全局自定义事件监听器。
一定要记得移除全局事件,不燃就会出现多次扫描
一:在你的pda中要是设置广播输出:模式是键盘方式输出
方法:设置---扫描---Default:把里面的键盘方式输出取消掉,就会看到下面的广播动作和广播数据标签(这两个很重要,在后面会用到)
上图:
二:在你的uni-app项目里 新建一个公共组件 就叫 scan-code 吧,放到公共组件components中,目录:components/scan-code/scan-code.vue
这里就用到了广播动作和广播数据标签
filter.addAction("android.intent.ACTION_DECODE_DATA")
intent.getStringExtra("barcode_string")
代码里的filter.addAction里换成你的广播动作,intent.getStringExtra(里换成你的广播标签
代码如下:
<template>
<view class="content"></view>
</template>
<script>
var main,receiver,filter;
var _codeQueryTag = false;
export default {
data() {
return {
scanCode: ''
}
},
created: function (option) {
this.initScan()
this.startScan();
},
onHide:function(){
this.stopScan();
},
destroyed:function(){
/*页面退出时一定要卸载监听,否则下次进来时会重复,造成扫一次出2个以上的结果*/
this.stopScan();
},
methods: {
initScan() {
let _this = this;
main = plus.android.runtimeMainActivity();//获取activity
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
filter = new IntentFilter();
filter.addAction("android.intent.ACTION_DECODE_DATA"); // 换你的广播动作
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver',{
onReceive : function(context, intent) {
plus.android.importClass(intent);
let code = intent.getStringExtra("barcode_string");// 换你的广播标签
_this.queryCode(code);
}});
},
startScan(){
main.registerReceiver(receiver,filter);
},
stopScan(){
main.unregisterReceiver(receiver);
},
queryCode: function(code){
//防重复
if(_codeQueryTag)return false;
_codeQueryTag = true;
setTimeout(function(){
_codeQueryTag = false;
},150);
var id = code
console.log('id:', id)
uni.$emit('scancodedate',{code:id})
}
}
}
</script>
<style>
page {
background-color: #efeff4;
}
.content {
text-align: center;
}
</style>
三:页面引用,只引用一次就好,我是index.vue 引用的,我的app的其他功能都是在这个页面链接走的
直接上代码:
切记:首页往各个子页面跳转的时候 移除监听事件uni.$off('scancodedate'),要不首页的监听会一直存在,就会出现首页这个扫码
uni.navigateTo({ 之前、之前、之前 uni.$off('scancodedate')
<template>
<view>
<view>你的页面内容</view>
<scan-code></scan-code>
</view>
</template>
<script>
import scanCode from "@/components/scan-code/scan-code.vue";
export default {
components: { scanCode },
data() {
return {}
}
onShow: function() {
var _this = this
uni.$off('scancodedate') // 每次进来先 移除全局自定义事件监听器
uni.$on('scancodedate',function(data){
console.log('你想要的code:', data.code)
})
}
}
其他的页面引用方法:不需要再次引入scanCode
因为其他的页面都是从首页跳转过来的,所以其他的页面需要
onUnload() {
// 移除监听事件
uni.$off('scancodedate')
}
代码如下:
onLoad() {
var _this = this
uni.$on('scancodedate',function(data){
// _this 这里面的方法用这个 _this.code(data.code)
console.log('你想要的code:', data.code)
})
},
onUnload() {
// 移除监听事件
uni.$off('scancodedate')
}
如果这个页面还有详细页面需要跳转,切记 uni.navigateTo({ 之前、之前、之前 uni.$off('scancodedate')
到此所有的代码就完事了。
重点就是全局监听,真机测试的时候在控制台可以打印出你的code和routes,看下是否每次的扫描只是执行的本页面(路由)下的程序。
一直困惑在uni-app中实现pda的广播扫码功能,今天终于找到了一个解决方案。
方案就是做一个全局监听,只引入一次,来防止很多页面都引入了扫码的组件,造成多次扫描,数据出现多次
知识点:全局监听:官网的全局监听地址
uni.$emit:触发全局的自定事件。附加参数都会传给监听器回调。
uni.$on:监听全局的自定义事件。事件可以由 uni.$emit 触发,回调函数会接收所有传入事件触发函数的额外参数
uni.$off:移除全局自定义事件监听器。
一定要记得移除全局事件,不燃就会出现多次扫描
一:在你的pda中要是设置广播输出:模式是键盘方式输出
方法:设置---扫描---Default:把里面的键盘方式输出取消掉,就会看到下面的广播动作和广播数据标签(这两个很重要,在后面会用到)
上图:
二:在你的uni-app项目里 新建一个公共组件 就叫 scan-code 吧,放到公共组件components中,目录:components/scan-code/scan-code.vue
这里就用到了广播动作和广播数据标签
filter.addAction("android.intent.ACTION_DECODE_DATA")
intent.getStringExtra("barcode_string")
代码里的filter.addAction里换成你的广播动作,intent.getStringExtra(里换成你的广播标签
代码如下:
<template>
<view class="content"></view>
</template>
<script>
var main,receiver,filter;
var _codeQueryTag = false;
export default {
data() {
return {
scanCode: ''
}
},
created: function (option) {
this.initScan()
this.startScan();
},
onHide:function(){
this.stopScan();
},
destroyed:function(){
/*页面退出时一定要卸载监听,否则下次进来时会重复,造成扫一次出2个以上的结果*/
this.stopScan();
},
methods: {
initScan() {
let _this = this;
main = plus.android.runtimeMainActivity();//获取activity
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
filter = new IntentFilter();
filter.addAction("android.intent.ACTION_DECODE_DATA"); // 换你的广播动作
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver',{
onReceive : function(context, intent) {
plus.android.importClass(intent);
let code = intent.getStringExtra("barcode_string");// 换你的广播标签
_this.queryCode(code);
}});
},
startScan(){
main.registerReceiver(receiver,filter);
},
stopScan(){
main.unregisterReceiver(receiver);
},
queryCode: function(code){
//防重复
if(_codeQueryTag)return false;
_codeQueryTag = true;
setTimeout(function(){
_codeQueryTag = false;
},150);
var id = code
console.log('id:', id)
uni.$emit('scancodedate',{code:id})
}
}
}
</script>
<style>
page {
background-color: #efeff4;
}
.content {
text-align: center;
}
</style>
三:页面引用,只引用一次就好,我是index.vue 引用的,我的app的其他功能都是在这个页面链接走的
直接上代码:
切记:首页往各个子页面跳转的时候 移除监听事件uni.$off('scancodedate'),要不首页的监听会一直存在,就会出现首页这个扫码
uni.navigateTo({ 之前、之前、之前 uni.$off('scancodedate')
<template>
<view>
<view>你的页面内容</view>
<scan-code></scan-code>
</view>
</template>
<script>
import scanCode from "@/components/scan-code/scan-code.vue";
export default {
components: { scanCode },
data() {
return {}
}
onShow: function() {
var _this = this
uni.$off('scancodedate') // 每次进来先 移除全局自定义事件监听器
uni.$on('scancodedate',function(data){
console.log('你想要的code:', data.code)
})
}
}
其他的页面引用方法:不需要再次引入scanCode
因为其他的页面都是从首页跳转过来的,所以其他的页面需要
onUnload() {
// 移除监听事件
uni.$off('scancodedate')
}
代码如下:
onLoad() {
var _this = this
uni.$on('scancodedate',function(data){
// _this 这里面的方法用这个 _this.code(data.code)
console.log('你想要的code:', data.code)
})
},
onUnload() {
// 移除监听事件
uni.$off('scancodedate')
}
如果这个页面还有详细页面需要跳转,切记 uni.navigateTo({ 之前、之前、之前 uni.$off('scancodedate')
到此所有的代码就完事了。
重点就是全局监听,真机测试的时候在控制台可以打印出你的code和routes,看下是否每次的扫描只是执行的本页面(路由)下的程序。
收起阅读 »












