微信小程序研发问题梳理:翻页:下拉:缓存:canvas:富文本:分享

微信小程序研发问题梳理

最近鼓捣小程序的时候,着实遇到了一些问题,尽管有些再翻看文档几遍,就能找到答案,但还是要发挥下烂笔头的功效,顺便梳理下。

问题列表

  1. 登录流程
  2. 小程序标签页地址无法跳转问题
  3. 页面翻页内容加载问题
  4. 页面下拉无法触发的问题
  5. 小程序本地缓存的使用
  6. Canvas制图横向滚动
  7. 富文本内容无法解析
  8. 小程序分享功能

1.登录流程

通过小程序登录时获取的 code 和 appid 及 secret 请求微信开放接口 sns/jscode2session 获取登录校验信息(session-key|unionid)

<只简单举例,微信小程序开发文档上有具体说明>

    wx.login({success: res => {// 发送 res.code 到后台换取 openId, sessionKey, unionIdthis.getLoginInfoByCode(res.code);}})
//用code获取登录session-key
getLoginInfoByCode: function (code){var that = this;wx.request({url: 'https://wx.xxx.com/api/wx/user/getLoginCode',method: 'POST',data:{code: code},success: function(dta){if (dta.data) {var dt = dta.data;// console.log(dt);// console.log('openid:' + dt.data.openid);// console.log('session_key:' + dt.data.session_key);}}})},
//通过session-key和小程序附加信息获取用户信息
getUserInfoBySessKey: function (param) {wx.getUserInfo({success: res => {// 可以将 res 发送给后台解码出 unionIdwx.request({url: 'https://wx.xxx.com/api/wx/user/saveUserData',method: 'POST',data: {encryptedData: res.encryptedData,sessionKey: param.session_key,iv: res.iv,openid: param.openid},success: function (dt) {// console.log('detail:');// console.log(dt.data);}})// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回// 所以此处加入 callback 以防止这种情况if (this.userInfoReadyCallback) {this.userInfoReadyCallback(res)}}})}

注1:此处的参数在后台获取时,过滤参数验证需要谨慎,最好先实验通过后,再过滤。(比如:配置后台验证服务器环境时)

注2:所有api.weixin.com的接口请求,都要打缓存。

注3:确保小程序的js没有报错,不然会有接口请求不到数据的情况!


2.小程序标签页地址无法跳转问题

也是从网上前辈们处得知:页面内的跳转地址,如果和标签栏里的地址一样,那么是不生效的,需要更换地址。

//app.json
{"pages": ["pages/index",],"tabBar": {"list" : [{"pagePath" : "pages/index","text" : "首页",}]},"debug": true
}
<!-- pages: index -->
<navigator url='/pages/index' hover-class='navigator-hover'></navigator>

我的处理方式是本办法,将目标页面copy到一个新目录,换个地址路径

<!-- pages:detail -->
<navigator url='/pages/detail' hover-class='navigator-hover'></navigator>

3.页面翻页内容加载问题

后加载到页面的内容需要堆积到之前的变量里。

getList: function () {var that = this;if (bPageSum < curPage && curPage != 1) {return false;}wx.request({url: 'https://wx.xxx.com/api/wx/area',data: {startDate: that.data.startDate,endDate: that.data.endDate,page: curPage,pageSize: pageSize,},header: {'content-type': 'application/json'},success: function (dt) {curPage = curPage + 1;bTotal = dt.data.total;bPageSum = dt.data.pageSum;//堆积var len = dt.data.list.length;for (var i = 0; i < len; i++) {bAllList.push(dt.data.list[i]);}//页面初始化时的变量that.setData({list: bAllList});}})},

<这里如果有好的方法,欢迎留言>


4.页面下拉无法触发的问题

要在应用页面( pages/index.json) 里开启配置;

//pages: index.json{"navigationBarTitleText": "首页","enablePullDownRefresh": true
}
//pages: index.js/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function() {...wx.stopPullDownRefresh();},

5.小程序本地缓存的使用

在用户驻留时间较长的时候会对接口请求后的数据加本地缓存,减少请求。

//pages: index.jsgetInfo: function () {var that = this;wx.request({url: 'https://wx.xxx.com/api/wx/info',method: 'POST',dataType: 'json',data: {date: that.data.curDate},header: {'content-type': 'application/json'},success: function (dt) {//将结果打入本地缓存wx.setStorage({'key': 'wx_' + that.data.curDate,'data': dt.data});that.logic(dt);}})},//.../** * 清除本地缓存*/clearCache: function (){wx.removeStorage({key:  'wx_'+this.data.curDate,success: function (res) {return true;}})  },//.../*** 生命周期函数--监听页面显示*/onShow: function() {//同步本地缓存var dt = wx.getStorageSync(k);that.logic(dt);},

6.Canvas制图横向滚动

参考资料 > 微信小程序canvas超出屏幕实现左右滑动的方法

方案一

将绘制出的canvas 保存为本地路径的一个img 路径.然后将图片放到 scroll-view 里面,进行滑动.

<!-- wxml -->
<scroll-view class="temp_day_box" scroll-x><view class="canvas_height"><image class="canvas_img" src='{{canvasSaveimg}}'></image></view>
</scroll-view>
<canvas canvas-id="canvasWeather" class="canvasHigh"></canvas>
/* wxss */
.canvasHigh {width: 2250rpx;height: 270rpx;transform: translateX(-200%);
}
.canvas_img{width: 2250rpx;height: 270rpx;
}

[注] 这里的canvasHigh的css属性可以用很多其他的方式隐藏,但是这里注意的是一定不能用display:none;或者 标签里面加hidden,wx:if属性,这样保存下来的图片路径是不会显示出来的.

/* js */
//前面的写法这里就不再编写,可以查看相关文档和官方api
ctx.draw();
wx.canvasToTempFilePath({canvasId: 'canvasWeather',//canvasId和标签里面的id对应success: (res) => {var shareTempFilePath = res.tempFilePath;_this.setData({//将获取到的图片临时路径set到canvasSaveimg中canvasSaveimg:shareTempFilePath})}
})

方案二

在scroll-view标签中绑定一个滚动时触发的事件,这里就不需要保存为图片,但是动画效果有点小小的僵硬.

<!-- wxml -->
<scroll-view class="temp_day_box" scroll-x bindscroll='scrollCanvas'> <view class="canvas_height" style='transform: translateX(-{{canvasLen}}px);'><canvas canvas-id="canvasWeather" class="canvasHigh"></canvas> </view>
</scroll-view>
/* js */
scrollCanvas: function(e) {console.log(e);var canvasLen = e.detail.scrollLeft;this.setData({canvasLen: canvasLen})
}

7. 富文本内容无法解析

在抓取数据展示或者后台添加了富文本内容要通过变量展示到页面时,会出现内容源码出现在页面,html标签没有被解析的情况,推荐使用WXParse插件

插件资源

github-wxParse

应用实例

下载资源,将wxParse目录copy至pages同级;

① 引入插件js脚本

// js//引入插件JS脚本
var WxParse = require('../../wxParse/wxParse.js');Page({data: {aid : ''},/*** 根据文章ID获取资讯**/getArticleInfo: function () {var that = this;wx.request({url: 'https://wx.xxx.com/api/wx/getInfo',data: {aid: that.data.aid},header: {'content-type': 'application/json'},success: function (dt) {//插件实例var article = dt.data.content;WxParse.wxParse('article', 'html', article, that, 5);}})}}

② 引入插件模板

<!-- wxml --><!-- 引入插件模板 -->
<import src="../../wxParse/wxParse.wxml"/><view class="block"><view class="content"><!-- 文章内容:START --><view class="content-text"><template is="wxParse" data="{{wxParseData:article.nodes}}"/></view><!-- 文章内容:END --></view></view>

③ 引入插件样式;

/* wxss *//* 引入插件样式 */
@import "../../wxParse/wxParse.wxss";

这样就可以展示了。大概的原理:将富文本内容通过js解析节点内容,再加载到页面。

可能会遇到的问题

Error: html.replace is no a funciton ...

i. 找到wxParse/html2json.js 文件,将其中的 console.dir()替换为 console.log();

ii. 在wxParse插件目录中全局搜索console,将打印全部注释掉;


 

8. 小程序分享功能

<!-- pages/index.wxml -->
<button open-type="share">分享给好友</button>
/* pages/js *//*** 用户点击右上角分享*/onShareAppMessage: function() {return {title: '彩票双色球开奖结果查询分析预测',path: '/pages/index/ball_index',imageUrl: '../../images/color_ball.png',success: function(e){//要求小程序返回分享目标信息wx.showShareMenu({withShareTicket: true});},fail(e){return false;}};}

 


 

欢迎访问小程序:DoubleColorBall


 

成长的路上有你有我

<欢迎关注留言讨论 !>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx重启方式

2019独角兽企业重金招聘Python工程师标准>>> 重启方式有三种&#xff1a; 1.简单型&#xff0c;先关闭进程&#xff0c;修改你的配置后&#xff0c;重启进程。 2.重新加载配置文件&#xff0c;不重启进程&#xff0c;不会停止处理请求 3.平滑更新nginx二进制&#x…

axure如何页面滑动时广告位上移_新手APP运营如何做广告位投放

运营是什么&#xff1f;这种问题在各种论坛、贴吧、百度知道、问答百科类中都会出现。上面也有各种大神各式各样的回答&#xff0c;从不同角度向我们阐述了什么是运营。用 户运营、内容运营、社区运营、活动运营、市场运营、等等&#xff0c;各种各样的文章对它们有非常多的分类…

常见的8个前端防御性编程方案

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天分享几个常见的前端防御性编程方案。点击下方卡片关注我&#xff0c;或者查看源码等系列文章。学习源码整体架构系列、年度总结、JS基础系列关于前端防御性编程我们大多数情况可能遇到过&am…

比特平面分层_平面设计中的分层

比特平面分层One of the first windows to pop up automatically, when I first started using Adobe Photoshop back in 2013, was the Layers one. Albeit I was dabbling around with it for making memes, it was one of the first things I played around with.2013年&…

微软中国推校园先锋计划,保障学生低价获取正版软件

2010年7月13日&#xff0c;人人网 Lucky 7 率先向同学们宣布了"微软校园先锋计划"上线的消息&#xff0c;该计划现在接受学生预购正版 Windows 7 专业版和 Office 2010 专业版&#xff0c;正式销售的日期为7月19日。该计划的官网是&#xff1a;http://ms.shop.edu.cn…

Nginx laraval-admin 页面小图标不显示 问题处理

laraval-admin 页面小图标不显示 类似问题 nginx下加载eot|otf|ttf|woff|svg等404 错误问题 浏览器console控制台报错 GET http://admin.xxx.com/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro.woff2 net::ERR_ABORTED 404 (Not Found)CSS 样式引用字体 font-face …

Ajax完整资料加代码

什么是Ajax&#xff1f;答&#xff1a;Ajax是一种无需加载整个网页&#xff0c;就能够更新部分网页&#xff0c;与后台交互的技术。Ajax的优点&#xff1f;答&#xff1a;能够在不更新整个页面的前提下&#xff0c;维护数据。这使得Web程序可以更快速的回应用户的动作&#xff…

did双重差分法_Stata中双重差分操流程及代码

01简介现代计量经济学和统计学的发展为我们的研究提供了可行的工具。倍差法来源于计量经济学的综列数据模型&#xff0c;是政策分析和工程评估中广为使用的一种计量经济方法。主要是应用于在混合截面数据集中&#xff0c;评价某一事件或政策的影响程度。该方法的基本思路是将调…

Axios 如何缓存请求数据?

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天推荐这篇Axios缓存请求数据的文章&#xff0c;相信是常见的业务场景&#xff0c;感兴趣的读者可以看看 umi-request&#xff0c;支持缓存功能。另外我之前也写过 axios源码文章&#xff0c;…

Reflection in .net

最近在看设计模式的一些东西&#xff0c;在讲到builder模式中使用到了c#的反射机制&#xff0c;从网上找了写资料&#xff0c;整理如下&#xff1a; 在C#中&#xff0c;我们要使用反射&#xff0c;首先要搞清楚以下命名空间中几个类的关系: System.Reflection命名空间(1) App…

山西万荣盛装迎新春 首届群众文化艺术节启幕

山西万荣盛装迎新春&#xff0c;首届群众文化艺术节启幕。 李继旺 摄 山西万荣盛装迎新春&#xff0c;首届群众文化艺术节启幕。 李继旺 摄 中新网太原1月29日电 (任丽娜)璀璨闪耀的宝鼎广场花灯展、激情活力的群众文体赛事、精彩纷呈的红火热闹、精品年货展销、李家大院游园会…

MySQL 隐式转换 字符串和整型说明

MySQL 隐式转换 字段类型定义 CREATE TABLE user (id int(10) NOT NULL AUTO_INCREMENT COMMENT 编号,/* ...... */name varchar(10) NOT NULL DEFAULT COMMENT 姓名,/* ...... */PRIMARY KEY (id),KEY idx_name (name,nickname),/* ...... */ ) ENGINEInnoDB DEFAULT CHARSE…

安装vs2017出现闪退现象_Adobe Reader 闪退

在我们的日常办公、学习中经常会涉及到 PDF 文件&#xff0c;免不了需要处理 PDF 文件如&#xff1a;PDF转Word、PDF合并、导出成图片、PDF解密、PDF转PPT、PDF加水印、PDF签名等等。PDF是与平台无关的文件格式&#xff0c;无论在哪种打印机上都可保证精确的颜色和准确的打印效…

从Vue.js源码中我学到的几个实用函数

大家好&#xff0c;我是若川。欢迎加我微信 ruochuan12&#xff0c;长期交流学习。今天推荐Vuejs源码中几个实用的方法。如果想看Vuejs源码&#xff0c;不知道如何下手&#xff0c;一般推荐配置Sourcemap&#xff0c;针对单个问题调试来看&#xff0c;如何调试Vuejs源码&#x…

real类型_如何使用REAL方法对您的Web内容进行现实检查

real类型Web内容审核模板 (Web content audit template) I recently completed a website audit project for a nonprofit organization through CatchAFire.org. As part of the website audit, I audited every key page’s content, looking for areas of opportunity.我最近…

青海行--(7月26日)翻越祁连山

嘉峪关是最值得一写的&#xff0c;虽然也是著名的旅游城嘉峪关景点是国家&#xff21;&#xff21;&#xff21;&#xff21;&#xff21;级景区&#xff0c;但与敦煌完全不一样&#xff0c;没有人山人海的游客&#xff0c;门票也不贵&#xff0c;才&#xff11;&#xff10;&a…

TikTok真题第1天 | 666.路径和IV、 207.课程表、210.课程表||

666.路径和IV 题目链接&#xff1a;666.路径和IV 解法&#xff1a; 参考这篇题解&#xff1a;【LeetCode - 666】路径和 IV_力扣666路径总和4-CSDN博客 关键点在于&#xff1a; &#xff08;1&#xff09;使用map来存node&#xff1a;key 为整数的前两位&#xff0c;value…

导出Excel

2019独角兽企业重金招聘Python工程师标准>>> 思路: 1, 引入Excel类库; 2, 创建一个模板; 3, 将数据填充进去; 4, 生成文件; 下面是一个简单的示例 $phpExcelObj new PHPExcel(); $titleMap self::TITLE_MAP; //设置表头 $i 0; foreach ($titleMap as $key > $…

CentOS系统更换yum源(repomd.xml not found解决方案)

CentOS系统更换yum源 问题 当初瞎鼓捣服务器&#xff0c;更换yum源为aliyun的&#xff0c;奈何阿里的源最近全部打不开&#xff0c;导致yum安装不了&#xff0c;一直报错&#xff1a; http://mirrors.aliyun.com/centos/6/os/x86_64/repodata/repomd.xml: [Errno 14] PYCURL E…

在类中用class时数据是共有还是私有_jvm学习笔记之class文件的加载、初始化

编写的java文件在要真正运行时&#xff0c;会首先被编译成 “.class"结尾的二进制文件&#xff0c;然后被虚拟机加载。那么在虚拟机中一个class文件要成为java实例&#xff0c;需要经历好几个步骤&#xff1a;1、装载&#xff1a;装载阶段由三个基本动作完成&#xff0c;要…