美文网首页
记录一次微信小程序从开发到上线。

记录一次微信小程序从开发到上线。

作者: c4a1d989518e | 来源:发表于2017-06-27 20:12 被阅读1799次

从有这个想法开始,到用代码实现,以及UI图标的搜索,只用了周末两天时间。首先看下最终的成果:
成就表:



积分表:


主要使用场景:是为了鼓励孩子养成良好的生活习惯,而做的一个小demo,其中的成就表用于,当孩子完成成就表中列的某项任务后,就会获得相应的积分。这些积分可以积累,查看一共有多少积分,有两种方式,一种方式是,完成某项任务后,点击,跳转到第二个页面,就会有总积分显示,或者去商店查看。商店是用来进行积分兑换的。孩子做任务不能白做,要有奖励,才会让孩子更有兴趣的坚持下去,在商店里可以用积分购买相应的奖励,比如说玩王者荣耀一局。

疑问一:跳转到下一个页面的时候,如何知道来自哪个成就图标点击跳转到的?

这就需要用到这个代码:

tocelebrate:function(e){ 
    wx.navigateTo({
      url: '../celebrate/celebrate?id='+e.currentTarget.id,
    })
  },

其中的重点就是这个id,这个id是哪来的?来自与wxml文件绑定的数据,这个数据在同一个文件夹下的js文件。

data: { 
    "req":[
      { id:1,title: "考试80分以上",score:30,thumb:"/images/Test_paper.png"},
      { id:2,title: "看望外公外婆", score: 30,thumb:"/images/grandma.png"},
      { id:3,title: "看望爷爷奶奶", score: 30,thumb:"/images/grandpa.png"},
      { id:4,title: "看书一小时", score: 10,thumb:"/images/open_book.png"},
      { id:5,title: "收拾屋子", score: 10,thumb:"/images/broom_brush.png"},
      { id:6,title: "运动一小时", score: 10,thumb:"/images/fat_run.png"},
      { id:7,title: "按时睡觉", score: 5,thumb:"/images/sleep.png"},
      { id:8,title: "吃蔬菜", score: 5 ,thumb:"/images/Eggplant.png"},
       {id:9,title: "看电影一部", score: 5, thumb: "/images/film.png" }
    ]   
  },

这里面的数据时需要传给wxml的

疑问二:界面如何布局?

代码如下:

<view class="listMall">
    <block wx:for="{{req}}" wx:key="index">
        <view bindtap="tocelebrate"  id="{{item.id}}">
            <view class="img"><image src="{{item.thumb}}" mode="aspectFill"/></view>
            <view class="name">{{item["title"]}}</view>
            <view>
                <text class="now_price">{{item["score"]}}分</text>
            </view>
          </view> 
      </block>        
  </view>

注意其中的id绑定的位置。这个xml代码主要用来绑定js,page中的data数据。
有了这些还有一个需要考虑,如果数据一个页面不能盛开,这时就要考虑滑动了。
这时候就需要用scroll-view了,具体方法可以参见小程序开发文档。用scroll-view把上面的代码包裹进去就可以了。

疑问三:在没有服务器的情况下,积分如何保存?

没有条件,我们就自己创造条件,没有服务器,积分可以保存在本地,微信小程序提供10M的localstore,而我们连1M都用不了,这些数据只要不换手机,不会轻易销毁,对于一个不太严肃的小demo,可以了。

wx.getStorage({
      key: 'total',
      success: function (res) {
        sum = util.accAdd(res.data, score)
        that.setData({
          sum: util.accAdd(res.data, score)

        })
        wx.setStorage({
          key: 'total',
          data: sum,
        })
      }
    })
  },

存储的格式很常见,就是普通的key-value格式。微信小程序开发器可以很方便的查看storage:


疑问四:上面代码中的accAdd函数是什么?

微信小程序有一个统一的位置来放置各种函数,accAdd就是一个具有加法功能的函数。放置函数的位置是:utils文件夹。当然也可以自己定义其他的文件夹。比如在其中添加如下代码。

//加法运算中级解决办法
function accAdd(a, b) {
  var c, d, e;
  try {
    c = a.toString().split(".")[1].length;
  } catch (f) {
    c = 0;
  }
  try {
    d = b.toString().split(".")[1].length;
  } catch (f) {
    d = 0;
  }
  return e = Math.pow(10, Math.max(c, d)), (a * e + b * e) / e;
}

疑问五:存储数据并不是那么容易,这个存储的数据来自哪?

当真正操作数据的时候,就会有一个难点,同一个js文件中数据的作用域,比如data中的数据,同一个js文件中就不能用,data中定义的数据好像是专门给wxml来用的。那在疑问三中我们的数据来自哪呢?
代码:

 var req = [
      { id: 1, title: "考试80分以上", score: 30, thumb: "/images/Test_paper.png" },
      { id: 2, title: "看望外公外婆", score: 30, thumb: "/images/grandma.png" },
      { id: 3, title: "看望爷爷奶奶", score: 30, thumb: "/images/grandpa.png" },
      { id: 4, title: "看书一小时", score: 10, thumb: "/images/open_book.png" },
      { id: 5, title: "收拾屋子", score: 10, thumb: "/images/broom_brush.png" },
      { id: 6, title: "运动一小时", score: 10, thumb: "/images/fat_run.png" },
      { id: 7, title: "按时睡觉", score: 5, thumb: "/images/sleep.png" },
      { id: 8, title: "吃蔬菜", score: 5, thumb: "/images/Eggplant.png" },
      { id: 9, title: "看电影一部", score: 5, thumb: "/images/film.png" }

    ]
    var id = options.id
    
    var score=req[id-1].score
    var title=req[id-1].title

    
    var that = this
    var sum = 0
   
    
    
    this.setData({
       score: score,
       title:title
      
    })

对,单独声明的。

疑问六:底部的tabBar如何设置?

很简单,在全局的json文件中加入下面的代码。selectedIconPath是选中时的图片的路径。

 "tabBar": {
    "selectedColor": "#F5B223",
    "color": "#9A9A9A",
    "list": [
      {
        "pagePath": "pages/choice/choice",
        "text": "成就",
        "iconPath":"images/ok.png",
        "selectedIconPath": "images/ok.png"
      },
      {
        "pagePath": "pages/user/user",
        "text": "商店",
        "iconPath":"images/shop.png",
        "selectedIconPath": "images/shop.png"
       
      }
    ]
  }

疑问7:代码运行没问题,但上传代码时报错,谷歌没有类似问题,去群里提问,也没有回答能够解决,怎么办?

我的方法是新建一个文件,看看能不能上传,如果能够上传,就说明代码中还是有错误,这时候就把问题定位到了代码中,而不是其他什么编辑器,网络的毛病,这时候就走一步删一点,自己调试就好了。

总结:微信小程序API还是比较友好的,能快速的实现想法的实现。审核也不叫慢,我的三天给过了,有些上午提交,下午就给过了。把很多功能封装好直接调用也越来越成为主流。在去年的时候就想着哪天微信自己把当时流行的AR、VR等技术研究好了,直接把API开放给开发者直接调用就好了。结果到了今年苹果在iOS11中就开放了AR的API文档,看iOS开发者的评价,说API还算是蛮简单的。微信要加快脚步啊。

相关文章

网友评论

      本文标题:记录一次微信小程序从开发到上线。

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