微信小程序 实例开发总结


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 相关文章推荐
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
Mar 04 Javascript
js实现简单锁屏功能实例
May 27 Javascript
Knockoutjs 学习系列(一)ko初体验
Jun 07 Javascript
浅谈JavaScript中数组的增删改查
Jun 20 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
Nov 03 Javascript
详解微信小程序开发之城市选择器 城市切换
Jan 17 Javascript
Angular动态添加、删除输入框并计算值实例代码
Mar 29 Javascript
angular使用post、get向后台传参的问题实例
May 27 Javascript
javascript观察者模式实现自动刷新效果
Sep 05 Javascript
js实现控制文件拖拽并获取拖拽内容功能
Feb 17 Javascript
vue2.0 + ele的循环表单及验证字段方法
Sep 18 Javascript
关于vue-cli 3配置打包优化要点(推荐)
Apr 22 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中substr()与explode()函数用法分析
2014/11/24 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
CentOS安装pillow报错的解决方法
2016/01/27 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
历史专业大学生职业生涯规划书
2014/03/13 职场文书
南京青奥会口号
2014/06/12 职场文书
年会邀请函范文
2015/01/30 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js
MySQL 数据表操作
2022/05/04 MySQL