微信小程序初体验

前言:

小程序 ——实际上就是基于微信平台的H5轻应用,微信将系统底层功能(设备、位置、媒体、文件等)和微信自身功能(登录、支付、分享等)封装成相应API供小程序调用。

自从微信小程序出来后,一直想找个机会上手体验一下,因为它跟我们移动端非常像,开发思想也很契合,而且很轻量,开发效率也很高。趁着公司最近在做技术分享,然后花了两天业余时间写了两个页面,算是有个大概的入门吧,在此做个笔记备忘。

因为本人之前写过一个开源的仿想去App的项目,有现成的接口和页面,我就直接拿那个项目的UI写了两个页面,以后有时间和机会再继续完善一下吧,本文可能没有什么技术含量哈,纯粹为了自己练手简单学习一下滴~

下面是小程序运行的效果,本文项目地址:WxDesigner
wxapp.gif
技术要点:

1、对网络请求进行了封装
2、banner的实现
3、横向列表和纵向列表及网格布局的实现
4、圆角图片的展示

《一》开发环境及账号准备

1、下载对应系统(Windows/Mac os)的微信开发者工具

image.png

2、注册一个小程序帐号,用于管理你的小程序。具体操作官方文档微信公众平台都有说明,在此不赘述。

《二》项目初建

1、打开微信开发者工具,新建项目,AppID选测试号即可。


image.png

2、新建的项目预览(左)及项目默认目录(右)如下,下面详细介绍一下项目目录结构。


image.png
小程序的目录结构及含义,我们基本都可以用Android项目开发的知识类比:

(1)app.json是小程序的全局配置文件,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等。app.json可以理解为Android项目中的AndroidManifest.xml文件,写的所有的页面都要在"pages"里面配置

{
  "pages": [
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "WeChat",
    "navigationBarTextStyle": "black"
  },
  "sitemapLocation": "sitemap.json"
}

(2)wxml文件,所有的页面都有对应的xxx.wxml文件,类似 HTML 的角色, 由标签、属性等等构成,用来描述当前页面的结构。与 HTML 标签不同的是wxml中的标签是微信包装好的开发组件,例如scroll-view、button、 text还有音视频组件等,wxml可以理解为Android中的xml布局文件

<!--logs.wxml-->
<view class="container log-list">
  <block wx:for="{{logs}}" wx:for-item="log">
    <text class="log-item">{{index + 1}}. {{log}}</text>
  </block>
</view>

(3)wxss文件,所有的页面都有对应的xxx.wxss文件,用来描述页面的样式风格的,类似于CSS。app.wxss为全局样式,每个页面下的为局部样式。wxss可以理解为我们Android开发中UI组件对应的各个属性样式,例如布局位置、颜色、字体大小、间距等

.log-list {
  display: flex;
  flex-direction: column;
  padding: 40rpx;
}
.log-item {
  margin: 10rpx;
}

(4)js文件,所有的页面都有对应的xxx.js文件,用来处理用户操作和业务逻辑处理的。可以理解为Android中的Activity

《三》入门开发小技巧

开发小程序跟开发移动端App类似,无非就是页面+数据+用户交互

一般项目刚开始都是先实现几个Tab的切换来构建项目主体内容的展示,在小程序Tab的实现超级简单,直接在app.json中配置一下就搞定了。相比Android首页Tab及Fragment的搭建,真的是不能再省事了😂

"tabBar": {
    "backgroundColor": "#fff",
    "color": "#212121",
    "selectedColor": "#d1a938",
    "list": [
      {
        "pagePath": "pages/home/home",
        "text": "设计",
        "iconPath": "src/icn_designer.png",
        "selectedIconPath": "src/icn_designer_highlight.png"
      },
      {
        "pagePath": "pages/discovery/discovery",
        "text": "发现",
        "iconPath": "src/icn_guang.png",
        "selectedIconPath": "src/icn_guang_highlight.png"
      }
    ]
  }

下面我们以logs页面为例,来了解一下页面的样式及数据绑定是如何实现的,以及如何处理简单的用户操作:

1、页面样式:这个就需要有扎实的CSS基础了,反正我的基础一般般😭

image.png

2、数据绑定
image.png
①我们在js文件中的data:{ }声明需要绑定的变量及类型。然后通过

this.setData({声明的变量名称:变量的值})

给变量赋值,一般而言动态赋值都是从网络异步获取数据,固定数据的绑定直接写死就行。
②在wxml中通过 {{ }} 的语法把该变量绑定到界面上,即可完成数据的绑定。
③写一个列表就用一个 wx:for循环就完成了,对比Android写一个列表,这个简直不能太爽😂。

wx:for="{{logs}}" 表示对遍历数组logs;
wx:for-item="log" 表示声明数组每个对象的名称,可以不声明,默认名称为item,数组默认下标为index。

3、处理用户操作及页面数据的传递:这就简单讲一下点击事件的处理及页面数据的传递。
(1)点击事件:我们只需要给UI组件声明catchTap就能给对应的控件绑定点击事件了,即可以理解为Android中在xml中声明onClick事件

image.png

(2)当我们进行页面跳转时,肯定需要传递一些数据,下面就介绍一下类似Android中通过Intent来携带数据一样的方式来传递页面参数
以本文案例中的home.js为例,点击首页分类菜单,进入商品分类列表。
image.png

通过在wxml中声明data-id,即要传的参数的值,然后在事件处理函数中通过 e.currentTarget.dataset.id获取到该参数的值,然后调用navigateTo进行页面跳转时,在页面路径中携带参数传递给要跳转的页面。

 /**
   * 点击分类进入分类详情
   */
  categoryDetail: function(e) {
    var categoryId = e.currentTarget.dataset.id;
    console.log(categoryId)
    wx.navigateTo({
      url: '../category/category?id=' + categoryId
    })
  }

跳转的新页面在onLoad函数中的options取出传递的参数即可。关于页面参数传递的详细介绍可以参考:小程序页面传参

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    console.log("接收页面传递过来的参数" + options.id)
  }

4、开发调试
(1)我们可以在Console中查看我们打印的日志,例如我在网络请求net.js中统一处理了接口返回的数据,打印出接口返回的结果。

image.png

(2)我们可以在AppData查看每个页面绑定的具体数据
image.png

(3)还可以在Network中查看到所有的网络请求的详细情况。
image.png

《四》新手遇到的一些小问题

(1)写wx:for时提示下面警告,需加上wx:key=""即可。


image.png

(2)由于微信小程序只支持https的网络请求,所以如果是http的接口,真机调试时,需要打开调试模式,才能正常访问到数据。

《五》参考文档

微信公众开放平台
微信小程序开发文档
微信公众平台

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