微信小程序 开发经验整理


Posted in Javascript onFebruary 15, 2017

微信小程序 开发经验整理

前言:

最近小程序出来了,公司也要求我们开发一款小程序。

于是,就开始着手做了,做了差不多一周吧,也遇到了很多问题,这里就来总结一下。(主要是从一个Android开发者的角度来述说的,可能比较零碎的一些知识点和经验,如果大家还有补充,欢迎)

总结

1:传参,方法判断

js中 方法中可以传递一个方法作为形参,在java中是不可以的。比如start项目中的

getUserInfo:function(cb){
 var that = this
 if(this.globalData.userInfo){
  typeof cb == "function" && cb(this.globalData.userInfo)
 }else{
  //调用登录接口
  wx.login({
   success: function () {
    wx.getUserInfo({
     success: function (res) {
      that.globalData.userInfo = res.userInfo
      typeof cb == "function" && cb(that.globalData.userInfo)
     }
    })
   }
  })
 }
},

这里就是传递一个形参,cb的方法,并且这里还有一个很巧妙的判断方法

typeof cb == "function" && cb(that.globalData.userInfo)

利用的&&的运算规律,首先判断cb是不是一个方法, 这里的==可以作为类型是否相当的判断,然后在&&中如果前面的不满足,后面的则不会执行;如果是cb是一个方法,调用cb方法,并且传入success成功回调的userinfo参数

还有一点,if(this.globalData.userInfo) 可以作为是否为null的判断条件,在java中不可以。

2:log打印

log的打印,如果直接打印“”+变量 是不可以的,因为人家没有toString()方法

X console.log("info"+info);

所以只能分开打印

console.log("info");
console.log(info);

3: json取对象

json的使用,可以通过 json["key"]来取其子对象

person: {
   name: "jafir",
   age: "11",
}
var name = person["name"];
var age = person["age"];
info: {persons:[{name:"123",age:11},{name:"jafir1",age:12}]}
//如果有数组 通过这种方法获取
 console.log(that.data.info["persons"][1].name)
 console.log(that.data.info["persons"][1].age)

 4:定义boolean类型值

要注意如果在page的data中要定义一个boolean类型的值,必须是 isSuccess : true而不是 isSuccess :"true"

if (this.data.isSccess) {
   console.log("true")
  } else {
   console.log("false")
  }

因为如果是isSucees : "true" ,结果为true,没问题,但是如果是isSucess:"false",结果依旧为true,

因为这里的isSuccess不是boolean,而是一个非空类型,既然非空,if就是为true

如果,默认undefined,if则为false

5:使用"that"

建议在 page{}外面定义一个that变量,然后在onLoad中赋值为this,以后所有的地方,都可以使用that,这样就避免有些地方,this并不是指向page的上下文对象

//上下文对象
var that;
page({
 onLoad: function (options) {
  // 页面初始化 options为页面跳转所带来的参数
  that = this;
 }

...
that.setData({
    xxx: xxx,
   })
})

6:page的生命周期方法

  1. 只有onload中有options参数,可以获取页面传值等等,onload只会执行一次
  2. 但是onShow可以每次切换页面的时候执行,所以,需要每次刷新页面的数据请求,可以放在onShow中,测试过,性能体验基本无影响
  3. page的生命周期没有Android那么丰富,页面之间传值也有一定的限制。
  4. 可以通过普通的url的传值方式传值,xxx?key = value ,但是要注意:我们传的值其实是相当于字符串和url拼接在一起,请不要直接传一个对象,因为对象没有toString方法。

传递json对象的步骤为:

1.把json对象变成字符串,如果本身就是那就直接用,如果是json对象,需要 parseString(json)

2.和url进行参数拼接?key=value

3.取得时候在onload的options里面取出,

onLoad: function (options) {
var value= options.key
}

然后JSON.stringify(value)转为json对象使用

7: 页面间跳转

从主页跳转一个新的界面 新界面处理完逻辑 成功与否 结束之后怎么通知 主页结果?
这种情况,一般是没有办法解决的。经过测试,如果你想要从二级非主页界面直接navigator打开主页,是不行的,会报错。

所以,我们采用的策略是:二级界面处理完数据之后,直接返回,然后在主页界面重新拉取数据。所以会出现,我们的请求接口是在onShow方法里面执行的。因为onload只会执行一次

8:wxml

1.text标签可以使用bindtap

<image src="{{logoUrl?logoUrl:'../../img/paihao.png'}}"></image>

可以使用这种方式来显示默认的图片

3.再强调一下 在标签中使用data-xx-oo ="value",在对应对象中可以通过e.currentTarget.dataset.xxOo获得,这里的xx-oo ,-其实是会转义驼峰。这种一般使用场景为 你可以给你所点击或者绑定事件的view设置一个数据,比如你一个picker里面有5个view,就可以绑定每个view不同的值,在触发事件的时候取到相应的值

4.如果你想要显隐view你可以通过wx:if="true/false"来处理,但是这样的话,如果为false,page不会去渲染这个view,它所在的位置空间也不会预留,假如下面的view就会往上排。如果想要留存它的位置空间,可以修改其style样式来解决

style="visibility:{{isShow?'visible':'hidden'}}"

9:统一网络请求处理结果

你可以封装一下网络请求的返回结果,做统一处理

requestWithGet: function(paramsData) {
 data.method = 'GET'
 this.requestInternal(paramsData)
},
requestWithPost: function(paramsData) {
 data.method = 'POST'
 this.requestInternal(paramsData)
},
requestInternal: function (paramsData) {
 var that = this;
 console.log('requestInternal: 开始请求接口[' + paramsData.url + ']');
 //开始网络请求
 wx.request({
  url: paramsData.url,
  data: paramsData.data,
  method: paramsData.method,
  success: function (res) {
   console.log('requestInternal: 接口请求成功[' + paramsData.url + ']');
   paramsData.success(res);
  },
  fail: function (res) {
   console.log('requestInternal: 接口请求失败[' + paramsData.url + ']');
   console.log(res);
   ////在这里做请求失败的统一处理
   wx.showToast({
    title: '网络访问失败',
    duration: 1500
   })
   typeof paramsData.fail == "function" && paramsData.fail(res);
  },
  complete: function (res) {
//在这里做完成的统一处理
   typeof paramsData.complete == "function" && paramsData.complete(res);
  }
 })
}

这样在使用请求的时候,可以直接先wx.request({}) 这样,就可以IDE给你联想生成对应的请求格式,然后直接把“wx.request” 替换 “requestWithGet”或者“requestWithPost”就OK了

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

Javascript 相关文章推荐
一个可以显示阴历的JS代码
Mar 05 Javascript
JQuery中如何传递参数如click(),change()等具体实现
Apr 28 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
Jun 05 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
Jan 18 Javascript
JS正则表达式比较常见用法
Jan 26 Javascript
EasyUI 结合JS导出Excel文件的实现方法
Nov 10 Javascript
JavaScript Canvas绘制圆形时钟效果
Aug 20 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
Sep 11 Javascript
vue-resouce设置请求头的三种方法
Sep 12 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
Aug 07 Javascript
在vue中使用image-webpack-loader实例
Nov 12 Javascript
前端学习——JavaScript原生实现购物车案例
Mar 31 Javascript
bootstrap table操作技巧分享
Feb 15 #Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
Feb 15 #Javascript
JS原型与原型链的深入理解
Feb 15 #Javascript
js中数组插入、删除元素操作的方法
Feb 15 #Javascript
jQuery中on方法使用注意事项详解
Feb 15 #Javascript
防止重复发送 Ajax 请求
Feb 15 #Javascript
Input文本框随着输入内容多少自动延伸的实现
Feb 15 #Javascript
You might like
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
傲盾软件面试题
2015/08/17 面试题
赡养老人协议书
2014/04/21 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
论文致谢词范文
2015/05/14 职场文书
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js