微信小程序实践:数据获取,回到顶部,下拉刷新,上拉加载等

看着文档拿做过的项目的接口实践了一下
效果图:


程序主页

装车单

划重点:
1.语法
2.提供的组件,自定义组件,模版以及样式文件
3.界面之间数据的传递
4.路由
5.后台数据的获取
使用中很惊喜的是微信开发者工具在创建项目之后的整个环境搭建和视图的展示都很清晰人性化,整个自己去体会了。
1.语法:语法上来说风格和vue很像,支持es6,用起来还算顺手。
2.提供的组件主要是<view> <text> <button> <image> 最为常用,用过react-native的就觉得眼熟了,但是这里都是小写哟。自己写的模版用<template>包住,<import src="../template/template.wxml"/>的形式引入<template is="name"/>的形式使用,模版里的事件都需要在使用模版的模块下写好。
组件相对复杂,有自己的js,json等全套,引入的时候需要在写进使用模块的json文件里,写好路径。以下是官方例子:


组件的使用

使用的时候

<my-component>
    <!-- 这部分内容将被放置在组件 <slot> 的位置上 -->
    <view>这里是插入到组件slot中的内容</view> 
</my-component>
<!-- 组件模板 -->
<view class="wrapper">
  <view>这里是组件的内部节点</view>
  <slot></slot>//<my-component>内的内容会在这里面显示
</view>

样式就写在对于名称的wxss文件中,和css文件写法一致
4.路由:
一般来说,开发者工具在你选择新建page的时候,就会给你自动配置好路由,人性化吧。


新建页面

在最外层的app.json里就多了一些代码:
如果你自己只加一个wxml文件又想加入路由就自己在这个页面里加入相对的位置路径。
路由跳转:navigateTo

{
  "pages": [
    "pages/index/index",  //这里都是路由哟,在微信里翻译应该叫页面?这个理解就好吧,没有正规答案
    "pages/logs/logs",
    "pages/too/too",
    "example/index",
  ],
 "window": {
    "backgroundTextStyle": "dark",//黑色的下啦显示
    "navigationBarBackgroundColor": "#21a",//蓝色的底色
    "navigationBarTitleText": "你诗爷的小程序",
    "navigationBarTextStyle": "white",//白色的顶部文字
    "enablePullDownRefresh": true//允许下拉,这个基本用得到的。
  }
}
wx.navigateTo({
      url: '../too/too',
    })

配置文档:
https://developers.weixin.qq.com/miniprogram/dev/framework/config.html#%E5%85%A8%E5%B1%80%E9%85%8D%E7%BD%AE
为了看的清晰,我用了颜色分明的做例子,效果:

image.png

5.很重要的一点,数据的获取:
首先:
关掉微信验证

接口没有通过微信是不能用的,我们不是正式上线就把这个勾掉进行数据获取,这里还有一个惊喜的地方,就是竟然没有跨域问题,vue和react都是要进行跨域操作的。(不知道是不是之前用过这个接口nginx已经代理了,这个没有来得及去验证)
然后在外层的app.js 里的globalData中写下你的接口通用地址:
我的地址

再然后:我这里写了两个接口作作为实践,第一个是登录,第二个是获取一个装车单列表。
登录写在进入后的第一个页面组合的onLoad中。

wx.request({
      url: app.globalData.api + '/auth/auth/login', //接口详细地址
      data: {
        password: '123456',//发送的数据
        login: '199199199199'
      },
      header: {
        'content-type': 'application/json' // 默认值
      },
      method: 'POST',//类型
      success: (res) => {
        console.log(res.data.result)//得到数据
        app.globalData.info = res.data.result || {}
        this.setData({
          info: res.data.result || {},   //成功之后保存在globalData和这个页面的data中,globalData不直接在页面中使用,负值给本页面的data来使用全局数据。
        })
      }
      //还可以写一个error 。
    })
这里是我获取到的数据

装车单页面数据获取:

知识点:循环数据,回到顶部,下拉刷新,上拉加载。
// pages/too/too.js
const app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    item: {
      index: 0,
      msg: 'this is a template',
      time: '2016-09-15'
    },
    info: {},
    top: 0,
    dataItems: [],
    has_next: false,
    parmas: {
      offset: 0,
    }
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    console.log(this.data.parmas)
    if (app.globalData.info) {
      this.setData({
        info: app.globalData.info,
      })
      this.getItem()
    }
  },
  getItem: function(type) {
    wx.request({
      url: app.globalData.api + '/tms/delivery/search',
      data: this.data.parmas,
      header: {
        'content-type': 'application/json',
        'token': app.globalData.info.token,
      },
      method: 'GET',
      success: (res) => {
        type === 'up' ? wx.stopPullDownRefresh() : null
        console.log(res.data)
        this.setData({
          dataItems: this.data.parmas.offset === 0 ? res.data.result && res.data.result.items 
          : [
              ...this.data.dataItems,
              ...res.data.result && res.data.result.items
            ],
          has_next: res.data.result && res.data.result.has_next || false,
        })
      }
    })
  },
  tapMove: function() {
    this.setData({
      parmas: {
        offset: 0
      }
    },() => {
      wx.pageScrollTo({ 
        scrollTop: 0, //回到顶部
        duration: 500, //过程耗时
      })
      wx.startPullDownRefresh()
    })
  },
  down: function() {
    if (this.data.has_next) {
      this.setData({
        parmas: {
          offset: this.data.parmas.offset + 20
        }
      }, () => {
        this.getItem()
      })
    }
    console.log('down')
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    console.log('--->up')
    this.getItem('up')
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    console.log('---->down')
    this.down()
  },

})

这里我把数据获取写在了一个函数之中,方便页面刷新时公用。还有数据的处理,我相信有代码经验的人都是看得懂的。
这里微信提供了很多api,下拉刷新,上拉加载都很方便,个人觉得比提供的<scroll-view>好用。
装车单页面:

<!--pages/too/too.wxml-->
<view class='box'>  
  <view wx:for="{{dataItems}}" class='orders-box' wx:for-item="i" wx:key="{{i.id}}" >
    <text style='font-size: 16px; color: blue'>{{i.serial_no}}</text>
    <view class='orders'>
      <view wx:for="{{i.order_list}}" wx:for-item="j" wx:key="{{j.id}}" class='order-item'>
        <text>{{j.order_code}}</text>
      </view>
    </view> 
  </view> 
  <button size="mini" class='to-top' bindtap="tapMove">回到顶部</button>
</view>

一个小程序出炉了,记录以下我的第一个小程序实践。

还有一个关于图片上传的问题,微信会把你需要上传的图片托管在自己的平台给你一个临时地址。我只得到这个临时地址,当下就可以使用在小程序中,没有提供base64,这个需要后台拿这个临时地址于微信交互获取更需要的信息。这个是目前唯一觉得不是很理想的地方,如果提供不同的方式,可以临时也可以选择base64就好啦。总的来说,微信提供的拍照和上传,提示等等的api使得开发很方便呢。
我看到有人把数据获取包装了,可我倒是觉得这样的获取已经很简便了,公共的一些配置都放在全局里调用也够用了。话说我在react项目中使用一个写好的action也几近那么多行代码了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,672评论 18 139
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,982评论 3 119
  • 独自一人 伫立在冷风中瑟瑟发抖 身边已没有你 我开始了漫长的等待 数着时间 等一个约定的兑现 多少个黑夜里埋在被窝...
    Jiebabe阅读 672评论 0 0
  • 最近对接某应用, 他们集成我司sdk后出了点问题, 打算看看他们代码, 发现咋jadx中找不到包名目录;jadx目...
    冰川孤辰js阅读 13,878评论 1 5