Android开发者for小程序(一)初识小程序

前言

作者本人是一名Android开发者,前端开发知识了解不多,小程序正式发布之后,好奇心的驱使下,作为一个闲不住的IT男(当然还有boss的要求),自然是要撸一撸小程序的,下面记录下我初入小程序过程中的一些心得和知识点

开发工具

小程序的开发工具可以有多种选择,这里推荐两个:

  • 官方IDE
  • EgretWing

官方IDE调试方便,但代码提示很差,EgretWing这个工具最新版本支持小程序,代码提示会比较全面,但是只能预览静态页面,无法调试和运行动态数据(也可能是我不太会用),放一张截图


ok,所以我建议开两个窗口,使用EgretWing编辑小程序代码,在官方IDE中调试和查看log
具体的IDE对比可以参考该文章:五大微信小程序开发IDE深度评测

小程序的文件结构

小程序整体包含两个部分

app全局

  • app.js 全局逻辑和生命周期处理
  • app.json 全局配置
  • app.wxss 全局公共样式

page页面

  • js 页面逻辑
  • wxml 页面布局
  • wxss 页面样式表
  • json 页面配置

文件类型总共就只有js wxml wxss json四种,简单明了


注意:

  • 任意页面必须有.js和.wxml
  • 同一页面的文件需要在同一文件夹下,且文件名相同(仅文件类型不同)
  • 使用EgretWing会生成一些ide的配置文件,无需理会

配置

小程序配置使用.json文件

//app.json
{
  "pages": [//指定所有页面路径
    "pages/index/index",
    "pages/logs/logs",
    "pages/info/info"
  ],
  "window": {
    "enablePullDownRefresh": true,//全局支持下拉事件
    "backgroundTextStyle": "dark",//窗口背景色
    "navigationBarBackgroundColor": "#000",//导航栏背景色
    "navigationBarTitleText": "WeChat",//导航栏title
    "navigationBarTextStyle": "white"//导航栏字体颜色
  }
}

//index.json
{
    "navigationBarTitleText": "小程序",
    "enablePullDownRefresh": true
}
  • 所有页面必须在app.json中的pages节点下注册,路径为全路径
  • page.json只支持window节点下的属性
  • page.json在实际页面中会覆盖app.json中的同属性
  • .json文件中不允许任何形式的注释(上面代码是个错误示范2333)

生命周期

App生命周期

  • onLaunch()当小程序初始化完成时,会触发onLaunch(注意全局只触发一次)
  • onShow()当小程序启动,或从后台进入前台显示,会触发onShow
  • onHide()当小程序从前台进入后台,会触发onHide

page生命周期

  • data 页面的初始数据
  • onLoad 生命周期函数--监听页面
  • onReady 生命周期函数--监听页面初次渲染完成
  • onShow 生命周期函数--监听页面显示
  • onHide 生命周期函数--监听页面隐藏
  • onUnload 生命周期函数--监听页面卸载
  • onPullDownRefresh 页面相关事件处理函数--监听用户下拉动
  • onReachBottom 页面上拉触底事件的处理函数

其中使用比较多的onLaunch()用来初始化一些全局数据,page.onLoad加载页面数据,onPullDownRefresh和onReachBottom处理列表数据

页面布局

页面布局使用wxml和wxss配和使用,可以使用class和style引入样式

基础

//wxml
<view class="container">
  <image src="{{imageUrl}}" class="image" mode="aspectFill"></image>
  <view class="msg">
    <text class="text">描述: {{title}}</text>
    <text class="text">来源: {{source}}</text>
    <text class="text">类型: {{resType}}</text>
  </view>
</view>

//wxss
.image {
  width: 100%;
  height: 60vw;
}

.msg {
  width: 100%;
  padding: 10px;
}

.text {
  display: block;
}

数据绑定

小程序中视图层与逻辑层的关联方式全部都是数据绑定,这与Android开发完全不同,没有FindViewById,没有view.setXxx()方法,一开始会不习惯这种方式

//wxml
<text class="text">描述: {{title}}</text>
//js
data: {
    title: 'this is title'
}

如果需要更新text,则使用setData()方法

that.setData({
    title:"呵呵"
})
  • 为什么不直接使用this.setData(),是因为上下文对象不同,后面实际开发中会提到

wx:for

重复渲染组件,用于列表或轮播图(注意:wxml中没有直接提供列表组件)

<view wx:for="{{items}}">
  {{index}}: {{item.message}}
</view>
  • 其中默认指定index为下标,item为当前项
  • {{}}双括号内表示引用data中的数据
  • wx:for="{{items}} 会重复渲染items数组长度个数的view区块,从而形成列表

wx:if

条件渲染,其实就是提前给个条件,满足条件时才会展示这个view,基本等同于hidden属性,具体差异可以查看官方文档

逻辑处理

网络请求

wx.request({
  url: 'http://gank.io/api/data/福利/10/1'
  data: {},//请求参数key:value形式
  method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
  header: {}, // 设置请求的 header
  success: function (res) {
    console.log("请求成功" + res)
  },
  fail: function () {//失败

  },
  complete: function () {//完成

  }
})
  • 请求协议为https
  • 最多只能并行执行5个请求
  • header中可以指定Content-Type

数据绑定与更新

使用app或page下的data存储数据,wxml组件绑定data中的数据,数据有更新时使用setData()更新数据并刷新界面

//wxml
<view class="container">
  <image src="{{imageUrl}}" class="image" mode="aspectFill"></image>
  <view class="msg">
    <text class="text">描述: {{title}}</text>
    <text class="text">来源: {{source}}</text>
    <text class="text">类型: {{resType}}</text>
  </view>
</view>

//js
Page({
    data: {//定义数据,用于组件绑定数据
        title: '',
        imageUrl: '',
        resType: '',
        source: ''
    },
    onLoad: function (res) {//取值
        this.setData({//更新数据并刷新绑定了这些数据的组件
            title: res.title,
            imageUrl: res.imageUrl,
            resType: res.resType,
            source: res.source,
        })
    }
})

点击事件

点击事件使用bindtap属性,用来指定一个函数处理该事件,参数为event

<view class="item-text" bindtap="itemClick">
//js
bindViewTap: function (event) {
  wx.navigateTo({
    url: '../logs/logs'
  })
},
  • 如果需要处理列表中item的点击事件,则需要知道当前的index,即事件传值,后面会具体说道
  • 除了点击,还要一些其他的事件,具体可以查看官方文档

这篇就到这里了,下一篇将开发具体Demo加以记录分享出来,轮播,列表的实现,刷新+分页,点击传值跳转等.

关于作者

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

推荐阅读更多精彩内容