Why & How

微信小程序开发记录

2017-03-24  本文已影响201人  27bda0c4e05d

入门直接看文档

app.json

小程序的公共配置文件,可以配置路由、tabbar等。

事件绑定

绑定的事件无法传参,用data-属性,然后用e.currentTarget.dataset获取

API

页面跳转

在wxml中设置data-url属性、bindtap事件

<block wx:for="{{menuList}}" wx:key="{{index}}">
    <view class="menu-item" data-url="{{item.url}}" bindtap="navigatePage">
        <!-- ... -->
    </view> 
</block>

获取data属性,使用dataset
  注意:如果view内部还有元素,e.target.dataset是无法获取data属性的,需要使用currentTarget

Page({
    navigatePage: function(e){
        var url = e.currentTarget.dataset.url; //dataset获取data属性
        wx.navigateTo({url: url})
   }
})

js动画

  1. 动画数据
      用animationData存储动画数据
Page({
  data: {
    animationData: {}
  }
})
<view animation="{{animationData}}"></view>
  1. 创建动画实例
var animation = wx.createAnimation({
    duration: durationTime,
})

一个step表示一组动画,scale和rotate两个动作会同时进行

animation.scale(2,2).rotate(45).step()

然后通过export导出animation实例的动画数据,setData将动画数据传递给组件

this.setData({
  animationData:animation.export()
})

下拉刷新、底部加载

下拉刷新只能使用页面的滚动,scroll-view不能用。

  1. 下拉刷新
  1. 滚动到底部加载
      虽然可以使用onReachBottom,但是官方有bug,(╯‵□′)╯┴─┴
Page({
    //...
     onPullDownRefresh:function(){
        // request
        wx.stopPullDownRefresh()
    },
    onReachBottom: function(){
        // ...
    }
    //...
})

请求

wx.request的success返回值不是服务器的直接返回数据,实际是在res.data中。所以如果statsuCode在服务器返回的数据中,需要自己做判断。下面通过es6-promise封装了一下请求

//配合promise
new Promise((resolve, reject) => {
    wx.request({
      url: url,
      data: data,
      method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
      header: {'Content-Type': 'json'}, // 设置请求的 header
      success: function(res){
         let resData = JSON.parse(res.data.Data);
      
          if(resData.StatusCode == 0){
              
          }else{
              
          }
          
      },
      fail: function(res){
          
      }
    });
})

跳转

wx.switchTab({  
    url: '../index/index',  
    success: function (e) {  
    var page = getCurrentPages().pop();  
    if (page == undefined || page == null) return;  
    page.onShow();  
}  

组件

picker

index表示数据的下标,用来处理选中,需要在data中保存记录。当数据是object value时,需要设置range-key,否则弹出框显示[object objec]。

<!-- 
value:弹出框中默认选中的值的index;
range-key: 弹出框中需要显示的key值
-->
<picker bindchange="bindPickerChange" value="{{index}}" range="{{objectArray}}" range-key="name">
    <view >
        <text>请选择:</text>
        <view >
            <text>{{objectArray[index].name}} </text>
        </view>
    </view>
</picker>
Page({
    data: {
        index:0, //默认选中第几个
        objectArray:[
          {
            id: 0,
            name: '美国'
          },
          {
            id: 1,
            name: '中国'
          },
          {
            id: 2,
            name: '巴西'
          },
          {
            id: 3,
            name: '日本'
          }
        ]
    },
    bindPickerChange: function(e){
        //选择Change事件,改变选中index
        this.setData({
            index: e.detail.value
        });
    }
})

input

input的type类型不同弹出键盘的类型不同

问题

上一篇下一篇

猜你喜欢

热点阅读