微信小程序-入门篇

前言

2017年1月9日,微信小程序发布。这也标志着FaceBookRN,阿里的WeexTencent的小程序这三架马车在2017年并驱骑行。今天,就先来说说三架马车其中之一的小程序。

搭建开发环境

1.成为微信开发者
微信公众平台注册账号并成为微信的个人或企业开发者

2.下载开发工具
点击下载,然后傻瓜式安装好就行了

3.安装NodeJs
官网下载NodeJs,然后也是傻瓜式的安装好,安装好后,NodeJS会自动在PC的环境变量Path里面添加安装好的NodeJS根目录,最后再DOC执行node命令验证是否安装好就行了,安装好后如下图:

NodeJS.png

创建HelloWorld

打开微信Web开发工具,可以看到

创建项目.png

如果是企业开发者,直接填写AppID就好了,如果不是我们点击无AppID,如果我们前面没有安装NodeJS,这里是不会显示无AppID的,所以我们得正确安装NodeJS
接下来就是填写项目名称和项目工作目录就行了。点击添加项目,我们就创建好了第一个项目。如下图

创建完后.png

目录结构及配置

创建好后,目录结构如下图

目录结构.png

从整体来看,小程序遵循的是MVC模式,小程序分为视图层View和逻辑层AppService的两层框架,并在视图层和逻辑层之间提供数据传输和事件系统。

  • app.js,它主要是放置一些程序的全局变量、属性或方法以及执行程序的一些生命周期,比如onLaunch(),onShow(),onHide()。当程序一启动的时候就会执行onLaunch()方法,当页面显示的时候执行 onShow()方法,当界面隐藏或转换到后台的时候执行onHide()方法。
  • app.jsonpages配置所有页面的路径,在window对象里面配置window的样式,在tabBar设置底部tab的样式,在networkTimeOut对象里面配置一些全局超时变量,通过debug赋值是否开启调试模式。
  • app.wxss 相当于css文件,全局样式,在所有页面都可以调用。
  • index.js 第一个页面的逻辑层,包括一些事件处理函数,还有一个onLoad()方法,当页面加载完后会执行。
  • index.json 可以覆盖一些窗口navigationBar的一些属性。
  • index.wxml 页面的视图布局文件,相当于Androidxml布局。其中里面的view相当于div,其中bindtap属性指的是点击事件,然后对应的点击事件在index.js里面处理。
  • index.wxss 首页的一些样式,供index.wxml的根节点属性使用。

在创建一个页面的时候,其中xxx.jsxxx.wxml是必须的文件,其他的文件是非必须。

响应的数据绑定

根据上面创建的HelloWorld代码基础上,添加一个按钮,实现点击按钮改变data对象的属性motto属性值,从而实现简单的响应数据绑定布局效果。
首先在首页的视图文件 index.wxml通过button组件添加一个按钮,代码如下:

<!--index.wxml-->
...
  <view class="usermotto">
    <text class="user-motto">{{motto}}</text>
    <button bindtap="bindMottoTap" class="userMottoBtn">点击</button>
  </view>
</view>

index.wxss里面添加一点点样式

/**index.wxss**/
...
.usermotto {
  margin-top: 200px;
  text-align: center;
}
.userMottoBtn{
  width: 200px;
  height: 50px;
  margin-top: 10px;
}

接下来在index.js里面添加点击事件

//index.js
...
  bindMottoTap: function() {
    this.setData({
      motto:"Hello 小程序"
    })
  },
  ...
})

然后编译后,我们点击可以实现下面的效果

weLite.gif

模块化

从上面项目中的logs页面,就可以看到一个简单的模块化代码使用,它可以很好的处理代码公用部分,从而提高代码的复用性

//logs.js
var util = require('../../utils/util.js')

从上面的代码可以看出,模块化是通过require这个关键词使用的,然后传入一个相对路径参数,从而获取模块化代码的对象,通过获取的这个对象调用相关的方法和属性。
比如调用util.jsformatNumber()方法,就可以在log.js里面直接调用

util.formatTime(new Date(log))

其中,util.js方法可以在任何页面里面使用,从而实现部分代码的模块化

创建一个简单的登录页面

通过Pages创建一个新页面login,结构如下图

登录.png

1.在login.json修改下naigationBar的标题

{
  "navigationBarTitleText": "登录"
}

2.在login.wxml里面创建视图样式

<!--login.wxml-->
<view class="container">
  <view class="section">
    <input id="username" type="text" placeholder="请输入用户名" maxlength="10" bindinput="bindUserName" focus="true"/>
  </view>
  <view class="section">
    <input id="password" type="password" placeholder="请输入密码" bindinput="bindPassWord" focus="false"/>
  </view>
  <button type="button" class="btn" bindtap="loginBtn">登录</button>
</view>

3.在login.wxss里面添加一些css样式

/* login.wxss */
.section{
  height: 25px;
  width: 50%;
  background-color: #F2F2F2;
  margin: 10px;
  padding: 10px;
  text-align: left
}
.btn{
  width: 25%;
  height: 45px;
  margin: 10px;
  text-align: center;
}

4.在login.js处理响应的事件

// login.js
Page({
  data: {
    username:'',
    password:''
  },
  bindUserName: function(e) {
    this.setData({
      username:e.detail.value
    });
  },
  bindPassWord: function(e) {
    this.setData({
      password:e.detail.value
    });
  },
  loginBtn: function() {
    if(this.data.username=="goach"&&this.data.password=="123456"){
      wx.navigateTo({
        url: '../index/index',
      })
    }else{
      wx.showModal({
        title: "用户名或密码不正确",
        showCancel:false,
        duration:2000
      });
    }
  },
})

4.最后再app.jsonpages第一行配置login页面,把login页面做为首页

{
  "pages":[
    "pages/login/login",
  ...
  ],
...
}

在上面代码中,通过 input组件实现两个输入框,然后添加了一个button,通过获取到两个输入框的输入值来简单验证用户名和密码是否正确,如果正确则通过wx.navigateTo()来跳转到index页面,如果不正确,则通过wx.showModel显示提示框。
最后显示的效果如下:

login.gif

实现首页Tab化

很多小程序底部都会有tab效果,如果样式比较简单,直接用小程序为我们提供的tabBar即可,实现这种效果只需要在app.json里面添加tabBar`的代码

{
  ...
  "tabBar": {
    "color": "#000000",
    "selectedColor": "red",
    "borderStyle": "white",
    "list": [{
      "pagePath": "pages/index/index",
      "text": "首页",
      "iconPath":"pages/images/b_index_press_night.png",
      "selectedIconPath":"pages/images/b_index_press.png"
    },
    {
      "pagePath": "pages/logs/logs",
      "text": "日志",
      "iconPath": "pages/images/b_log_press_night.png",
      "selectedIconPath": "pages/images/b_log_press.png"
    }],
    "position": 0
  }
}

其中注意的一点就是,如果当前页面带有tab,那么从一个页面跳转到当前页面就不能使用wx.navigateTo()来进行跳转了,应该使用wx.switchTab()来跳转,比如上面的login页面跳转到index页面,就得把代码改成

  wx.switchTab({
        url: '../index/index',
      })

最后实现的效果如下

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

推荐阅读更多精彩内容