为了积攒粉丝,公司决定做一个一分钱姓名测算的小程序引导大家关注公众号。

实现的需求就是 

首页 用户编辑姓名和性别进行提交

2 测算结果页 实现分享和支付功能

3 测算历史页面 看到用户曾经测算记录

分享的过程和实现

首先,微信小程序单位可以采用rpx,布局可以采用flex布局

row :从左到右的水平方向为主轴

<view >
   <view class="flex-row" style="display: flex;flex-direction: row;">
    <view class="flex-view-item">1</view>
    <view class="flex-view-item">2</view>
    <view class="flex-view-item">3</view>
      </view>
column:从上到下的垂直方向为主轴
   <view class="flex-column" style="display:flex;flex-direction: column;" >
     <view class="flex-view-item">c1</view>
     <view class="flex-view-item">c2</view>
     <view class="flex-view-item">c3</view>
  </view>
</view>
基本上会html.css的实现页面都不成问题,下面就说下具体在做的时候遇到了哪些问题?
1.自定义toast,微信小程序有自带的toast组件
<toast hidden="{{hiddenToast}}" duration="3000" bindchange="toastHidden" >OK!</toast>
上面的图标是去不掉的,样式也不够灵活,所以我们就自己写了一个公用的toast页面,之后在需要用到的页面直接引用即可。
附代码:
wxml

<template name="toast">
  <view class="toast_content_box" wx:if="{{ isHide }}">
    <view class="toast_content">
      <view class="toast_content_text">
      {{content}}//自定义提示框内容
      </view>
    </view>
  </view>
</template>
js
let _compData = {
  '_toast_.isHide': false,// 控制组件显示隐藏
  '_toast_.content': ''// 显示的内容
}
let toastPannel = {
// toast显示的方法
show: function(data) {
  let self = this;
  this.setData({ '_toast_.isHide': true, '_toast_.content': data});
  setTimeout(function(){
    self.setData({ '_toast_.isHide': false})
  },2000)
  }
}
function ToastPannel() {
  // 拿到当前页面对象
  let pages = getCurrentPages();
  let curPage = pages[pages.length - 1];
  this.__page = curPage;
  Object.assign(curPage, toastPannel);
  // 附加到page上,方便访问
  curPage.toastPannel = this;
  // 把组件的数据合并到页面的data对象中
  curPage.setData(_compData);
    return this;
  }
  module.exports = {
    ToastPannel
  }
//页面引用方法
<import src="../../component/toastTest/toastTest.wxml"/>
<template is="toast" data="{{ ..._toast_ }}"/>
这样只要在页面onLoad里调用组件就可以直接渲染文案了
// 调用应用实例的方法获取全局数据
onLoad: function (options) {

  let app = getApp();
  // toast组件实例
  new app.ToastPannel();

}
 
2.页面内转发open-type="share"低版本不兼容(兼容版,不支持的手机自动不显示这个button按钮)
<button wx:if="{{canIUse}}" class="cs-btn shareBtn" open-type="share">分享给好友</button>
<share-button wx:else></share-button>
 
3.有数据的页面转发,转发时说页面不存在,因为转发时要带上参数

onShareAppMessage: function () {
  if (this.data.orderNo){
    return {
      title: '快来测测你的名字!',//分享的标题
      desc: '父母取的名字,真能影响一生?',//分享的文案
      path: '/pages/result/result?orderNo=' + this.data.orderNo + '&share=1'//分享的链接
      }
   }else{
    return {
      title: '快来测测你的名字!',
      desc: '父母取的名字,真能影响一生?',
      path: '/pages/result/result?strName=' + this.data.username + '&share=1'
      }
    }
}

4.返回顶部效果(页面整体加个页面监听)
<scroll-view class="bigWrap" scroll-y="true" scroll-top="{{scrollTop}}" bindscroll="scroll" bindscrolltolower= "scrolltolower" style="position: absolute; left: 0; top:0; bottom: 0; right: 0;">
</scroll-view>
//返回顶部效果
goTop: function (e) {
  this.setData({
    scrollTop: 0
  })
},
scroll: function (e, res) {
  // 容器滚动时将此时的滚动距离赋值给 this.data.scrollTop
  if (e.detail.scrollTop > 500) {//滚动高度超过500时,返回顶部按钮出现
    this.setData({
      goTopstatus: true
    });
  } else {
    this.setData({
      goTopstatus: false
    });
  }
}
5.页面生成订单,要重新进入小程序才可以看到?(这是因为你只在onLoad里加载了数据,并没有在onShow里面渲染数据)
6.判断接口某个字段有没有数据,要用length判断,data.item.length>0
7.load效果,当没有数据时出现load状态,有数据时load消失?
<image class="load" wx:if="{{load}}" src="/image/load.gif"></image>
在onLoad状态里加载loading,load赋值为true,当request请求成功时load赋值为false
8.请求接口
Myorder: function () {
  var orderNoStr = wx.getStorageSync('orderNoStr');//获取异步存储的订单号
  var that = this;
  wx.request({
    url: app.data.servsers + '?action=wxApi&function=MyOrder&orderNoStr=' + orderNoStr,//orderNoStr是异步存储的订单号
    header: {
      'content-type': 'application/json'
    },
    success: function (res) {
      that.setData({
        historyData: res.data.listData  //请求的数据放到data里,再渲染至页面上
      });
     },
  })
},
onLoad:function(options){
  this.Myorder();//在页面加载时请求接口
},
9.如何通过不同的参数访问不同的页面?
<navigator wx:if="{{item.pay_status==1}}" url="../result/result?orderNo={{item.orderNo}}">
</navigator>
<navigator wx:else url="../result/result?strName={{item.username}}" >
</navigator>
这里 跳到新页面之后在onload里面直接接收参数,接收方法也就是 options.[参数值]
orderNo={{item.orderNo}}的参数值就是{{item.orderNo}}
这样就可以通过不同的url去请求不同的接口,以至于渲染出不同的页面
 
10.获取微信小程序的openid
setOpenId: function (loginCode) {
  var that = this;
  wx.request({
  url: '../GetOpenid',
  method: "POST",
  data: {
    "mid": 'SM',
    "code": loginCode.code
  },
  header: {
    'content-type': 'application/x-www-form-urlencoded'
  },
  success: function (res) {
    wx.setStorageSync('openid', res.data.openid);
    that.createOrder();
  }
  })
}
还有一些支付上的逻辑,是要和微信对接的,大部分是开发那边做的,这就是这次小程序测试时遇到的问题,当然,我们提前上网查看资料,避免了一些坑,随便写写,希望能对接下来要做小程序的同学有所帮助吧~当然,我们的需求比较简单,很多强大的API没有用上,这次就算是入门吧(如有错误,欢迎指教),希望跟大家一起继续学习,以后有机会可以尝试功能更复杂的小程序~~

微信小程序实战的更多相关文章

  1. [转]微信小程序之购物车 —— 微信小程序实战商城系列(5)

    本文转自:http://blog.csdn.net/michael_ouyang/article/details/70755892 续上一篇的文章:微信小程序之商品属性分类  —— 微信小程序实战商城 ...

  2. [转]微信小程序之购物数量加减 —— 微信小程序实战商城系列(3)

    本文转自:http://blog.csdn.net/michael_ouyang/article/details/70194144 我们在购买宝贝的时候,购物的数量,经常是我们需要使用的,如下所示: ...

  3. [转]微信小程序之加载更多(分页加载)实例 —— 微信小程序实战系列(2)

    本文转自;http://blog.csdn.net/michael_ouyang/article/details/56846185 loadmore 加载更多(分页加载) 当用户打开一个页面时,假设后 ...

  4. 【微信小程序】转载:微信小程序实战篇-下拉刷新与加载更多

    下拉刷新 实现下拉刷新目前能想到的有两种方式 1. 调用系统的API,系统有提供下拉刷新的API接口 当然,你可以直接在全局变量app.json的window里面配置上面这个属性,这样整个项目都允许下 ...

  5. 微信小程序实战篇:商品属性联动选择(案例)

    本期的微信小程序实战篇来做一个电商网站经常用到的-商品属性联动选择的效果,素材参考了一点点奶茶. 效果演示:   商品属性联动.gif 代码示例 1.commodity.xml <!-- < ...

  6. 微信小程序实战 购物车功能

    代码地址如下:http://www.demodashi.com/demo/12400.html 一.准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.com/ ...

  7. 微信小程序实战之天气预报

    原文:微信小程序实战之天气预报 这个案例是仿UC中天气界面做的中间也有点出入,预留了显示当前城市名字和刷新图标的位置,自己可以写下,也可以添加搜索城市.值得注意的是100%这个设置好像已经不好使了,可 ...

  8. 微信小程序实战之百思不得姐精简版

    原文:微信小程序实战之百思不得姐精简版 微信小程序基本组件和API已撸完,总归要回到正题的,花了大半天时间做了个精简版的百思不得姐,包括段子,图片,音频,视频,四个模块.这篇就带着大家简述下这个小的A ...

  9. WordPress 网站开发“微信小程序“实战(三)

    本文是"WordPress 开发微信小程序"系列的第三篇,本文记录的是开发"DeveWork+"小程序1.2 版本的过程.建议先看完第一篇.第二篇再来阅读本文. ...

  10. 微信小程序实战笔记

    前言: 微信小程序最近刚从鹅厂生产出来,我有幸参与了一次小程序的实战,有必要记录我的开发过程.看上去小程序很简单,但是在深入开发的时候才能具体体会里面的变化,接下来记录我的第一个微信小程序的点点滴滴! ...

随机推荐

  1. oracle_sql的用法?

    本机连接oracle 数据库?打开cmd ----> 不同的用户有不同的用户名密码 ----> sqlplus scott/tiger(安装oracle数据库预留的用户)---- 回车 - ...

  2. 部署asp.net网站的小问题

    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG   web.config  修改 trust level="Full"

  3. BZOJ 1196 [HNOI2006]公路修建问题:二分 + 贪心生成树check(类似kruskal)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1196 题意: n个城市,m对城市之间可以修公路. 公路有两种,一级公路和二级公路,在第i对 ...

  4. PC样式reset参考

    /* html5doctor.com Reset Stylesheet */ * { padding:; margin:; list-style: none; } html, body, div, s ...

  5. AtCoder Beginner Contest 106 2018/08/18

    A - Garden Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement There is a ...

  6. 二:apache的Qpid消息中间件介绍

    一:什么是Qpid?--->Qpid 是 Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信.--->Qpid 提供了 ...

  7. 3170: [Tjoi 2013]松鼠聚会

    题目大意 给定n个点,找到一个点使这个点到其他所有点的切比雪夫距离之和最小. 题解 我们知道切比雪夫距离和曼哈顿距离的转化公式 \(1\)表示切比雪夫距离,\(2\)表示曼哈顿距离 我们有: \(x_ ...

  8. 【C++基础】形参实参

    c++规定:一个函数的默认实参既可以在定义中,也可在声明中指定,但在一个文件(准确的说,是一个作用域)中只能为一个形参指定默认实参一次

  9. CAS单点登录学习(二):客户端配置

    下载jar包因为cas的源码修改变动很大,所以客户端引入的jar包根据服务端的war包而定.之前搭建的cas服务端用的版本是3.5.2,经过测试,可以使用cas-client-core的3.2.1版本 ...

  10. TCP 协议的消息

    TCP: SYN ACK FIN RST PSH URG 详解 TCP的三次握手是怎么进行的了:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手:接收端收到请求并 ...