微信小程序 实例开发总结


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 相关文章推荐
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
Aug 14 Javascript
Javascript 面向对象 重载
May 13 Javascript
actionscript与javascript的区别
May 25 Javascript
JS中表单的使用小结
Jan 11 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
Apr 16 Javascript
JavaScript实现Iterator模式实例分析
Jun 09 Javascript
JS简单获取及显示当前时间的方法
Aug 03 Javascript
AngularJs bootstrap搭载前台框架——基础页面
Sep 01 Javascript
AngularJs ng-route路由详解及实例代码
Sep 14 Javascript
vue-cli入门之项目结构分析
Apr 20 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
如何使用JS在HTML中自定义字符串格式化
Jul 20 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环境搭建最新方法
2006/09/05 PHP
php SQL之where语句生成器
2009/03/24 PHP
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
javascript 学习之旅 (1)
2009/02/05 Javascript
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
理清apply(),call()的区别和关系
2011/08/14 Javascript
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
2017/12/11 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
vue 获取视频时长的实例代码
2019/08/20 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
python操作xml文件示例
2014/04/07 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
设置器与访问器的定义以及各自特点
2016/01/08 面试题
商务英语专业自荐信
2013/10/14 职场文书
工业设计专业推荐信
2013/10/29 职场文书
班班通项目实施方案
2014/02/25 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
初中学生期末评语
2014/04/24 职场文书
入党介绍人评语
2014/05/06 职场文书
个人欠款担保书
2014/05/20 职场文书
化妆品活动策划方案
2014/05/23 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
2015年信访工作总结
2015/04/07 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书