美文网首页Why & How
微信小程序开发记录

微信小程序开发记录

作者: 27bda0c4e05d | 来源:发表于2017-03-24 15:20 被阅读201次

    入门直接看文档

    app.json

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

    • 不想手动创建目录文件,可以在pages中配置好路由,会自动生成目录页面
    • tabBar 是一个数组,只能配置最少2个、最多5个 tab

    事件绑定

    绑定的事件无法传参,用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. 下拉刷新
    • 下拉刷新需要在页面配置json中开启"enablePullDownRefresh": true

    • 在页面js中,使用onPullDownRefresh事件,重新请求数据,请求完数据后通过wx.stopPullDownRefresh()停止当前页面的下拉刷新。

    1. 滚动到底部加载
        虽然可以使用onReachBottom,但是官方有bug,(╯‵□′)╯┴─┴
    • bug: iOS/Android 6.3.30, 首次进入页面,如果页面不满一屏时会触发 onReachBottom ,应为只有用户主动上拉才触发;
    • bug: iOS/Android 6.3.30, 手指上拉,会触发多次 onReachBottom ,应为一次上拉,只触发一次;
    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){
              
          }
        });
    })
    

    跳转

    • 比如从登陆页跳转到首页(tabBar有配置首页),必须使用wx.switchTab(OBJECT)跳转。
    • 已经打开的tab,调用switchTab不会触发onShow,只能手动调用onShow
    wx.switchTab({  
        url: '../index/index',  
        success: function (e) {  
        var page = getCurrentPages().pop();  
        if (page == undefined || page == null) return;  
        page.onShow();  
    }  
    
    • app.js 使用wx.switchTab(OBJECT)跳转,报错Cannot read property 'webviewId' of undefined

    组件

    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类型不同弹出键盘的类型不同

    • text:全键盘
    • mumber:纯数字键盘
    • digit:待小数点的数字键盘

    问题

    • WAService.js:3 navigateTo:fail url not in app.json
        url使用的是相对路径,不是app.json里配置的复制过来就行了
    • 小程序已经移除promise,需要用到第三方promise库,推荐es6-promise,网上有反映bluebird在android真机上报错。

    相关文章

      网友评论

        本文标题:微信小程序开发记录

        本文链接:https://www.haomeiwen.com/subject/vqdfottx.html