微信小程序 实例开发总结


Posted in Javascript onApril 26, 2017

微信小程序 开发过程中遇到问题总结

第一次正式开发一个小程序,就从以下几个方面来谈一谈小程序的开发过程和心得吧,主要说说这次项目中用到的功能。

数据请求

这次的小程序,没有太多的附加功能,所以数据以及对数据的处理是这次的主体工作,小程序向用户提供API,供用户向自己的服务器请求数据,值得一提的是,开发小程序之前,需要先在微信公众平台申请appID,并且绑定域名,域名必须是https协议,然后在小程序的开发工具的配置信息中完善信息,请求的地址需要在前面绑定的域名下。这个项目中用到wx.request从服务器拉取数据。

wx.request({
   url: that.data.couponData.requestUrl,
   data: that.data.couponData.queryData,
   header: {
     'content-type': 'application/json'
   },
   success: function(res) {
     var list = res.data.goodsList;
     console.log(res.data);
     for(var i in list) {
       list[i].quanUsedNum = parseInt(list[i].quanTotalNum) - parseInt(list[i].quanRemainNum);
      list[i].isImgRendered = false;
     }
    list[0].isImgRendered = list[1].isImgRendered = list[2].isImgRendered = list[3].isImgRendered = true;
     that.setData({"couponData.totalPage":res.data.totalPage});
     that.setData({"couponData.list":that.data.couponData.list.concat(list)});
    that.setData({"couponData.loadmore":!that.data.couponData.loadmore});
     that.setData({"couponData.queryData.pageNum":parseInt(that.data.couponData.queryData.pageNum) + 1});
     if(that.data.couponData.queryData.pageNum > that.data.couponData.totalPage) {
      that.setData({"couponData.isAction":false});
    }

    if(that.data.couponData.list.length < 1) {
      that.setData({"couponData.nodata":true});
    }
     if(f) {
       f();
     }
   }
 });

数据缓存

这里使用数据缓存是因为需要做一个搜索功能,就涉及到页面之间的数据传递,放在地址中也是一种方法,借用一下localStorage也可以,使用wx.setStorage将数据存储到localStorage中,页面跳转之后,在从localStorage中读取就可以了,读取数据的时候分同步读取和异步读取。

剪切板的应用

借用小程序的API可以很方便的将任何信息复制到剪切板,然后就可以粘贴了。

wx.setClipboardData({
   data: '【' + that.data.couponData.list[e.currentTarget.id].goodsTitle + '】复制这条信息,打开【手机淘宝】' + that.data.couponData.list[e.currentTarget.id].twoInOneKouling,
   success: function(res) {
     that.setData({"couponData.copyTip":true,"couponData.Kouling":that.data.couponData.list[e.currentTarget.id].twoInOneKouling})
   }
 });

模板

在这个项目中,页面基本很相似,但有细微差别,所以就使用了模板,新建一个template/template.wxml,name属性必须要设置。

<template name='navsearch'>
 <view class='nav-search'>
   <view class='nav-search__container space-between'>
     <view class='nav-search__search' wx:if='{{isSearch}}'></view>
     <input class='nav-search__input' placeholder='请输入关键词找券' name='queryStr' value="{{queryStr}}" bindfocus='toggleSearch' bindconfirm='doQuery' bindinput="syncQuery"/>
     <view class='nav-search__delete' wx:if='{{!isSearch}}' bindtap='deleteAll'></view>
     <view class='nav-search__btn center' wx:if='{{!isSearch}}' bindtap='doQuery'>搜索</view>
   </view>

   <view class='nav-filter' bindtap='toggleFilter'></view>
 </view>
 </template>

 <!--在其他文件中使用模板-->
 <import src="/template/template.wxml" />
 <template is='navsearch' data="{{...couponData}}"></template>

模块化

对于公共的js可以写在一个专门的js文件中,然后使用module.exports暴露接口。
通用的js文件使用require引入。

var common = require('../../common/common.js');
 ...
 common.f(); //调用

redirectTo & navigateTo

redirectTo是重定向至某页面,navigateTo是打开新的页面,值得说明的一点是,使用navigateTo打开的页面太多会导致小程序卡顿。

分享

Page({
   onShareAppMessage: function () {
     return {
       title: 'your title!',
       path: '/xxxx/xxxx/xxxx',  //分享之后回到这个页面
       success: function(res) {
         f(); //成功回调;
       },
       fail: function(res) {
         f(); //失败回调;

       }
     }
   }
 })

提高列表滑动的流畅性

简而言之就是页面滚动到哪里,列表中的图片就显示到哪里,实现方法如下。

//js文件
 Page({
   loadImg:function(e) {
     //计算接下来加载哪几张
     var index = Math.floor((e.detail.scrollTop - 8)/259.5);
     var temp = this.data.couponData.list; //完整的列表
     var min = Math.max(index * 2,0),max = Math.min(index * 2 + 8,temp.length);
     for(var i = min; i < max; i ++) {
       if(temp[i] && !temp[i].isImgRendered) {
         temp[i].isImgRendered = true; //列表中的每一项有一个标记是否加载图片的的属性,默认false,随着页面滚动,一个个变成true。
       }
     }
     this.setData({"couponData.list":temp});
     temp = null;
   },
 })

 //wxml文件中在scroll-view上绑定事件。
 <scroll-view class="section" scroll-y="true" bindscroll='loadImg'></scroll-view>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
js实现图片放大缩小功能后进行复杂排序的方法
Nov 08 Javascript
javascript抖动元素的小例子
Oct 28 Javascript
jQuery实现div浮动层跟随页面滚动效果
Feb 11 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
Aug 13 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
Jan 20 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
Feb 23 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
Apr 27 Javascript
JS中Attr的用法详解
Oct 09 Javascript
js实现鼠标拖拽缩放div实例代码
Mar 25 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
React-vscode使用jsx语法的问题及解决方法
Jun 21 Javascript
AngularJS 霸道的过滤器小结
Apr 26 #Javascript
JavaScript纯色二维码变成彩色二维码
Jul 23 #Javascript
xmlplus组件设计系列之按钮(2)
Apr 26 #Javascript
xmlplus组件设计系列之列表(4)
Apr 26 #Javascript
JS实现数组按升序及降序排列的方法
Apr 26 #Javascript
详解AngularJs ui-router 路由的简单介绍
Apr 26 #Javascript
JS ES6多行字符串与连接字符串的表示方法
Apr 26 #Javascript
You might like
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
jQuery.each使用详解
2015/07/07 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
2018/07/23 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
Python操作MongoDB详解及实例
2017/05/18 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
Python @property及getter setter原理详解
2020/03/31 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
专科毕业生就业推荐信
2013/11/01 职场文书
校运会口号
2014/06/18 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
财政专业大学生职业生涯规划书
2014/09/17 职场文书
故意伤害辩护词
2015/05/21 职场文书
Python实现学生管理系统(面向对象版)
2021/06/24 Python