要做

【微信小程序】语法笔记及开发心得

2017-03-27  本文已影响389人  徐薇薇

好久没有写代码了,今天自己开发了一个快递查询的微信小程序,把自己心得记录下来方便以后巩固。ps,小程序学的太晚了,人家去年好多都会了,我那时在干啥。。

1、学习脑图和思路:

2、学习资源:

A、微信小程序官方文档:https://mp.weixin.qq.com/debug/wxadocs

B、视频教程:

http://m.bilibili.com/video/av9085879.html?from=singlemessage#page=8

C、案例,Demo

3、学习脑图中的一些需要详细了解的地方:

A、小程序实现原理和程序架构:

这篇 文章:写的很详细。

还有这篇

B、Flex布局和相对绝对定位

包括了解容器元素、属性及属性值、属性应用场景。

Flex布局:其中有display,主轴和交叉轴,flex-direction排列方向,flex-wrap是否换行,justify-content元素在主轴上的对其方式,align-items在交叉轴的对其方式,align-self元素自身的对其方式,order定义元素的排列顺序,flex-grow当有多余空间时该元素放大比列,flex-shrink当空间不足时放大缩小比列,flex-basis元素在主轴上占据的空间。

相对和绝对定位:相对定位是和自身来比较,绝对定位是和离他最近的已经设置定位的上级元素比。

C、视图层要熟悉有哪些组件,组件对应属性,组件对应事件:

1)视图容器:View,scroll-view含滚动条的视图,swipe幻灯片,画布canvas;

var context = wx.createContext()
   context.setStrokeStyle("#00ff00")
   context.setLineWidth(5)
   context.rect(0, 0, 200, 200)
   context.stroke()
   context.setStrokeStyle("#ff0000")
   context.setLineWidth(2)
   context.moveTo(160, 100)

context.stroke()
   // 调用 wx.drawCanvas,通过 canvasId 指定在哪张画布上绘制,通过 actions 指定绘制行为
   wx.drawCanvas({canvasId: 'firstCanvas',actions: context.getActions() // 获取绘图动作数组})}

2)自定义组件和表单组件:自定义有icon,text,process,navigator:url;表单组件有label:for,picker:range和value,picker-view,slider:,switch等;

3)媒体组件:audio:src,image:src,video:src;

4)地图:map ,markers,longitude,latitude,scale,markers。

5)操作反馈小工具:action-sheet从底部弹出来,modal确认框,toast会自动消失,loading加载

6)组件数据绑定,组件数据内容展示(变量,if,for),组件事件绑定,引用,尺寸。引用案例如下:

<include src="../templates/header" />或

<import src="../templates/footer" />
<template is="footer2" />

D、逻辑层要熟悉的内容有:

1)组件数据怎么赋值:data及this.setdata({x:y})方法。

2)组件事件怎么处理:各个组件对应的常用事件要熟悉掌握,如:bindtap,bindchange(复选框,单选框,日期选择器,滑动选择器,交互反馈小工具),bindsubmit,bindreset,bindinput,bindfocus,bindblur,bindconfirm,bindplay播放时,bindpause暂停时,bindended结束时,bindload加载完毕时,bindmarkertap点击地图标记时触发,bindcontroltap点击地图时触发,bindtouchstart手指触摸动作开始,bindtouchmove手指触摸后移动,bindtouchend手指触摸动作结束,bindtouchcancel手指触摸动作被打断如来电,bindViewTap。

另外,注意的是组件事件区分冒泡和非冒泡,基本事件如下:

事件对象属性有:

3)组件之间数据怎么传输。

4)页面与页面之间数据怎么传输(在navigateto方法里?后传参数)。

5)网络怎么传输(和服务器,包括web socket等):

向服务器发起请求:wx.request({
 url: 'http://baidu/com',   data: {x: '' , y: '' //请求参数},header: {  'content-type': 'application/json'},success: function(res) { console.log(res.data) }});

6)web socket:连接,发送消息,收到消息,关闭连接。服务器代码部分如下:


@ServerEndPoint(value="/websocket/{user}")定义路径

public class MyWebSocketServlet{

   private Session session;

@OnOpen接收消息

public void open(Session session,@PathParam(value="user")String user){

this.session=session;

.........}

@OnMessage发送消息

public void inMessage(String msg){this.session.....;var t=message;....

try{session.getBasicRemote().sendText('msg') catch(Exception e){e.....}}

}

}

客户端代码部分:开启连接,发送消息,收到消息,关闭连接

开启连接wx.connection(){url:"www.baidu.com",data:{},methed:'GET',success:function(){},fail:functon(){},complete(){}}

发送消息:wx.sendSocketMessage(){data:'您好',sucess:function(){},fail:function(){},complete(){}}

收到消息:wx.onSocketMessage(function(res){var msg=this.date.testStr msg.push(res.data)   this.setData({testStr:msg})})

关闭连接:wx.closeSocket()

   

7)数据缓存(读取,保存,删除,数据异步操作)。

获取和保存数据:var logs=wx.getStorageSync('logs')[][]   logs.unshift(Date.now())   wx.setStoreSync('logs',logs)

删除数据:wx.removeStoreage({key:'',success:function(){'key:'',success:function(res)(),fail:function(){},complete:function(){}}})

数据异步:wx.setStorage({key:"",data:"",success:function(res){},fail:function(){},complete:function(){}})   wx.getStorage({key:"String",success:function(res){}})

8)媒体及其他文件怎么传输:

客户端代码部分:

wx.chooseImage({
 success: function(res) {
   var tempFilePaths = res.tempFilePaths
   wx.uploadFile({
url: 'http://localost:8080/iprest/test', //仅为示例,非真实的接口地址
     filePath: tempFilePaths[0], name: 'file', formData:{ 'user': 'test'},
     success: function(res){
       var data = res.data} })}})

如果是上传图片呢?客户端上传图片代码又是怎么样

wx.chooseImage({

 count:1,//选择第一张图片

 sizeType:['ariginal','compressed'],

  sourceTpe:['album','camera'],
 success: function(res) {
   var tempFilePaths = res.tempFilePaths
   wx.uploadFile({
url: 'http://localost:8080/iprest/test', //仅为示例,非真实的接口地址
     filePath: tempFilePaths[0], name: 'file', formData:{ 'user': 'test'},
     success: function(res){
       var tempPath = res.tempFilePaths  this.setData({imgUrl:tempPath})} })}})

保存下载音频或图片wx.downloadFile({
 url: 'http://example.com/audio/123.jpg',
 success: function(res) {wx.playVoice({filePath: res.tempFilePath }) }})

服务器端代码部分:收到上传的文件。


E、其他语法点必记:

返回:wx.navigateback({delta:1,success:function(res){},fail...,complete..}).

设置导航文本:.setNavigationBarTitle

页面加载时,加载完,展示时事件:onload和onready,onSHow

登录:wx.login()

打电话;wx.makePhoneCall

获取网络类型:wx.getNetworkType,如wifi,4G等,如果网络正常就success。

            wx.getNetworkType({success.function(res){var t=tes.networkTpye}})

获取设备信息:wx.getSystemInfo(){success;function(res){resmodel,res.pixelRatio,res.windoeWidth,rex.windowHeight,rex.language,res.version}}

交互反馈工具事件监听:wx.showModal和wx.showActionSheet,wx.showToast。

            如wx.showToast({title:'加载中,icon:"成功",duration:1000})

                setTimeout({function(){wx.hideToase(),1000}});

地图获取地理位置和查看位置:wx.getLocationres.latitude和longitude,wx.openLocation。

wx.getLocation({type:"wgs84",success:function(res){var latitude=res.lastitude   var lagitude=res.longitude   wx.openlocation({latitude:latitude,longitude:longitude,sacle:28})}})

F、实战:

产品设计--》框架搭建,配置-》界面设计和开发-》API设计和开发-》部署上线

G、数据统计:

用户分析,图文分析,菜单分析,消息分析,接口分析,网页分析。

有时间要做一个公益产品,做一点小小贡献。

上一篇下一篇

猜你喜欢

热点阅读