原文地址:https://mp.weixin.qq.com/s?__biz=MzAwNjI5MTYyMw==&mid=2651493295&idx=1&sn=4dc4c570140d246b5ead8eb0c01d90d9&chksm=80f19a67b78613714c42048d04b9cd4f70edb56f240cf622b4917e6d6e37a15b77f1d1a2e858&scene=1&srcid=09260pXyXsgtwo9QEeVEkWLE&pass_ticket=T1rHkZe%2Byvqkd727B8A6b1AJF0ebR7AuEC90jN5%2BpFg%3D#rd

目录

  1. 开发环境

  2. 目录结构

  3. WXML组件

  4. WXSS

  5. 数据绑定

  6. 条件渲染

  7. 列表渲染

  8. 模版

  9. 事件

  10. 引用

  11. 路由传参

  12. API

  13. 实例TodoList

1.开发环境

开发工具下载(https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html) 
安装之后,和微信web开发者工具一样,扫码登录即可,不同的是,创建一个小程序需要填写AppID,如果没有AppID的话,点击‘无AppID’即可

2.目录结构

一个小程序由两部分组成:框架主体部分、框架页面部分

框架主体部分

框架主体部分包含三个文件,位于项目的根目录 
1) app.js

//app.js//app.jsApp({  onLaunch: function () {    // 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)    // 调用API从本地缓存中获取数据    var logs = wx.getStorageSync('logs') || []    logs.unshift(Date.now())    wx.setStorageSync('logs', logs)  },  onShow: function() {      // 当小程序启动,或从后台进入前台显示,会触发 onShow  },  onHide: function() {      // 当小程序从前台进入后台,会触发 onHide  },  getUserInfo:function(cb){    var that = this    if(this.globalData.userInfo){      typeof cb == "function" && cb(this.globalData.userInfo)    }else{      //调用登录接口      wx.login({        success: function () {          wx.getUserInfo({            success: function (res) {              that.globalData.userInfo = res.userInfo              typeof cb == "function" && cb(that.globalData.userInfo)            }          })        }      })    }  },  globalData:{    userInfo:null  }})

app.js内调用了App函数(只能在app.js内调用)注册小程序实例,可以在这个文件中监听处理小程序的声明周期函数,并可以在此声明全局变量。 
小程序提供了全局方法getApp返回小程序实例

var app = getApp()console.log(app.globalData) // {userInfo:null}

此外,还提供了getCurrentPage方法获取当前页面的实例,getCurrentPage不能在onLaunch中调用,此时page尚未生成

2)app.json

{  "pages":[    "pages/index/index",    "pages/logs/logs"  ],  "window":{    "backgroundTextStyle":"light",    "navigationBarBackgroundColor": "#fff",    "navigationBarTitleText": "WeChat",    "navigationBarTextStyle":"black"  },  "tabBar": {    "list": [{      "pagePath": "page/index/index",      "text": "首页"    }, {      "pagePath": "page/logs/logs",      "text": "日志"    }]  },  "networkTimeout": {    "request": 10000,    "downloadFile": 10000  },  "debug": true}

此文件用来对小程序进行全局配置(app.json不得含有注释)

  • pages 配置页面路由,所有需要使用的页面都需要添加配置

  • window 设置页面窗口表现

  • tabBar 设置页面底部tab表现,其中list数组长度不超过5且至少为2

  • networkTimeout 设置网络超时时间

  • debug 设置debug模式的开启

3)app.wxss样式表

/**app.wxss**/.container {  height: 100%;  display: flex;  flex-direction: column;  align-items: center;  justify-content: space-between;  padding: 200rpx 0;  box-sizing: border-box;} 
框架页面部分

框架页面部分包含四个文件 
 
page.js,page.json分别对应于app.js和app.json,不同之处在于page.js中调用的是Page函数,page.json中只能对本页的window进行配置,因此,page.json中直接就是一个对象

{    "backgroundTextStyle":"light",    "navigationBarBackgroundColor": "#fff",    "navigationBarTitleText": "WeChat",    "navigationBarTextStyle":"black"}

然后再看看page.js

// page.jsPage({  data: {    // 页面的初始数据    text: "This is page data."  },  onLoad: function(options) {    // 页面加载时  },  onReady: function() {    // 页面渲染完成时  },  onShow: function() {    // 页面显示时  },  onHide: function() {    // 页面隐藏时  },  onUnload: function() {    // 页面卸载时  },  // 自定义属性,使用this方法  viewTap: function() {    this.setData({      text: 'Set some data for updating view.'    })  }})

3.WXML组件

小程序中并没有html标签,而是提供了一系列WXML组件

  • view 视图容器

  • scroll-view 可滚动视图容器

  • swiper 滑块视图容器

  • icon 图标

  • text text

  • progress progress

  • button button

  • checkbox-group 多项选择器,内部由多个checkbox组成

  • checkbox 多选项目

  • form form

  • input input

  • label label

  • picker 滚动选择器,现支持三种选择器,通过mode来区分,分别是普通选择器,时间选择器,日期选择器,默认是普通选择器

  • radio-group 单项选择器,内部由多个

    组成

  • radio 单选项目

  • slider 滑动选择器

  • switch 开关选择器

  • action-sheet action-sheet

  • modal 模态弹窗

  • toast 消息提示框

  • loading 加载提示符

  • navigator 页面链接

  • audio audio

  • image image

  • video 视频

  • map 地图

  • canvas 画布

这应该是类似于ng中的组件,目前小程序并没有提供自定义组件的功能

4.WXSS

WXSS用于描述WXML的样式表 
为了适应各种屏幕,WXSS扩展了尺寸单位rpx(responsive pixel),规定屏幕宽度为750rpx(20rem) 
另外,WXSS并不支持所有css选择器,目前支持的选择器有

  • .class

  • #id

  • element

  • element,element

  • :after

  • :before

5.数据绑定

数据绑定采用 “Mustache” 语法(双大括号)包裹变量

<!--index.wxml--><view class="container">  <text>{{hello}}</text></view> //index.js//index.jsPage({  data: {    hello: 'Hello World'  },  onLoad: function () {    this.setData({      hello:'Hello World'    })  }})

WXML 中的动态数据均来自对应 Page 的 data,并且需要调用setData方法通知视图数据变化

6.条件渲染

使用 wx:if=”{{condition}}” 来判断是否需要渲染该代码块,同大多MV*框架一样,if是惰性的,即初始判断为false时,不会渲染该代码块

<view wx:if="{{condition}}"> True </view>

7.列表渲染

使用wx:for绑定一个数组,wx:for-index可以指定数组当前下标的变量名(默认为index),wx:for-item可以指定数组当前元素的变量名(默认为item)

<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">  {{idx}}: {{itemName.message}}</view>

8.模版

使用name属性定义一个 stemplate 模版,模版拥有自己的作用域

<template name="msgItem">  <view>    <text> {{index}}: {{msg}} </text>    <text> Time: {{time}} </text>  </view></template>

使用name属性使用一个 stemplate 模版,data属性传入模版所需的数据

< template is="msgItem" data="{{...item}}"></template >

data

Page({  data: {    item: {      index: 0,      msg: 'this is a template',      time: '2016-09-15'    }  }})

9.事件

支持事件
  • touchstart 手指触摸

  • touchmove 手指触摸后移动

  • touchcancel 手指触摸动作被打断,如来电提醒,弹窗

  • touchend 手指触摸动作结束

  • tap 手指触摸后离开

  • longtap 手指触摸后,超过350ms再离开

事件绑定

以key-value形式绑定事件 
其中key为 bind 或 catch +事件名称,例如bindtap=“tapName”(bind不阻止冒泡,catch阻止事件向上冒泡) 
value为函数名称

事件对象
  • type 事件类型

  • timeStamp 事件生成时的时间戳

  • target 触发事件的组件的一些属性值集合 id、dataset、offsetLeft,、offsetTop

  • currentTarget 当前组件的一些属性值集合 id、dataset、offsetLeft,、offsetTop

  • touches 触摸事件,触摸点信息的数组 pageX、pageY、clientX、clientY、screenX、screenY

  • detail 特殊事件所携带的数据,如表单组件的提交事件会携带用户的输入

10.引用

WXML 提供两种文件引用方式import和include 
import可以在该文件中使用目标文件定义的template,但不能使用目标文件中import的其他template

// index.wxml<import src="item.wxml"/><template is="item" data="{{text: 'forbar'}}"/>

include可以将目标文件中除了

<!-- index.wxml --><include src="header.wxml"/><view> body </view><include src="footer.wxml"/> <!-- header.wxml --><view> header </view> <!-- footer.wxml --><view> footer </view>

11.路由传参

一个url如下

<navigator url="navigate?title=navigate" hover-class="navigator-hover">跳转到新页面</navigator>

在目标页的声明周期函数onLoad中传入options即可获取路由参数对象,另外url是相对的,不是app.json中定义的url

Page({  onLoad: function(options) {    this.setData({      title: options.title    })  }})

12. API

框架提供丰富的微信原生API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等,具体可查看官方文档

13.TodoList

最后是一个案例

  • 显示任务

  • 添加任务

  • 删除任务

  • 标记任务是否完成

  • 计算任务总数和已完成的任务数量

index.wxml
<!--index.wxml--><view class="input">  <input bindinput="bindKeyInput" placeholder="请输入任务名称" value="{{inputValue}}"/>  <button bindtap="add">确定</button></view><view class="list">  <block wx:for="{{list}}">    <view>      <checkbox-group bindchange="change" data-index="{{index}}">        <checkbox value="{{item.checked}}"checked="{{item.checked}}" />      </checkbox-group>      <text>{{item.value}}</text><button bindtap="delete" data-index="{{index}}">删除</button>    </view>  </block>  <view>    {{complete}}个已完成/{{list.length}}个任务  </view></view>

其中block并不属于组件,不会在页面中渲染,仅作接收控制属性用

index. wxss
/**index.wxss**/.input {    padding: 20 rpx}.list view {    padding: 10 rpx 20 rpx;    overflow: hidden}.list view text {    display: inline - block;    line - height: 92 rpx}.list view button {    width: 200 rpx;    display: inline - block;    float: right}
index.js
//index.jsPage({  data: {    list:[],    complete:0  },  bindKeyInput:function(e){    this.setData({      inputValue:e.detail.value    })  },  add:function(){    var list = this.data.list;    list.push({checked:false,value:this.data.inputValue});    this.setData({      list:list,      inputValue:''    })  },  delete:function(e){    var list = this.data.list;    list.splice(e.target.dataset.index,1)    this.setData({      list:list    })    this.com_task()  },  change:function(e){    console.log(e.detail.value[0])    var list = this.data.list;    list[e.target.dataset.index].checked = !!e.detail.value[0]    this.setData({      list:list    })    this.com_task()  },  com_task:function(){    var complete = 0,list = this.data.list;    for(var i=0,len=list.length;i<len;i++){      console.log(list[i].checked)      if(list[i].checked!=false){        complete++      }    }    this.setData({      complete:complete    })  }})

list为任务列表,complete为已完成的任务数量

页面展示效果如下

源码 https://github.com/mistory/todolist 点击阅读原文获取

微信小程序入门教程及实例相关推荐

  1. 微信小程序入门教程+案例demo

    微信小程序入门教程+案例demo 尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态,--微信小程序开发也就那么回事.你只需要 ...

  2. 从零开始的微信小程序入门教程(一)

    从零开始的微信小程序入门教程(一) 之前说要和同事一起开发个微信小程序项目,现在也在界面设计,功能定位等需求上开始实施了.所以在还未正式写项目前,打算在空闲时间学习下小程序.本意是在学习过程中结合实践 ...

  3. 从零开始的微信小程序入门教程

    之前说要和同事一起开发个微信小程序项目,现在也在界面设计,功能定位等需求上开始实施了.所以在还未正式写项目前,打算在空闲时间学习下小程序.本意是在学习过程中结合实践整理出一个较为入门且不是很厚的教程, ...

  4. 微信小程序入门教程---列表渲染多层嵌套循环及wx:key的使用(双层for循环)

    前言 入门教程之列表渲染多层嵌套循环,目前官方的文档里,主要是一维数组列表渲染的案例,还是比较简单单一,给刚入门的童鞋还是无从入手的感觉. <view wx:for="{{items} ...

  5. 微信小程序入门教程 --(保姆级)

    一.小程序注册 1.首先,到小程序官网注册自己的小程序账号,以下附有地址和教程: 小程序官网 进入这个地址之后,会看到这样的页面,点击立即注册按钮 2.在接下来的页面,选择小程序 3.然后根据提示完成 ...

  6. 开发微信小程序入门教程,含破解工具

    2016年09月21日晚 微信发不了微信"小程序"的内测版,一时间整个互联网都炸了锅.个大新闻.论坛都在讨论这个事情. 作为互联网的一猿,我们怎能不紧跟时代的脚步.于是第二天上午也 ...

  7. 微信小程序入门教程学习笔记

    写在前面: 作为一个刚刚入坑微信小程序的小白,以下是我在学习中的笔记,因为我真的太健忘了... 文章中可能会有错误,但是我会不断的修正的. 谢谢浏览,如有错误烦请指正 (≧∀≦)ゞ 微信官方的小程序开 ...

  8. 微信小程序入门教程之三:脚本编程

    这个系列教程的前两篇,介绍了小程序的项目结构和页面样式. 今天,接着往下讲,教大家为小程序加入 JavaScript 脚本,做出动态效果,以及如何跟用户互动.学会了脚本,就能做出复杂的页面了. 本篇的 ...

  9. 微信小程序入门教程之四:API 使用

    目录 一.WXML 渲染语法 二.客户端数据储存 三.远程数据请求 四.组件 五.获取用户个人信息 六.多页面的跳转 七.wx.navigateTo() 本篇就介绍怎么使用 API. 所有示例的完整代 ...

最新文章

  1. 论文简述 | 融合关键点和标记的基于图优化的可视化SLAM
  2. 【 FPGA 】组合逻辑中的竞争与险象问题(三)
  3. php 打开报错,php模式下 运行start.php 报错
  4. requests(二): json请求中固定键名顺序消除键和值之间的空格
  5. unsw计算机科学的挂科率,澳洲新南威尔士大学考试挂科率达41%
  6. spring入门-----spring中遍历各种集合
  7. 如何在myeclipse中导入jar包?
  8. Visual Studio属性配置中使用宏
  9. intel A20地址线
  10. AfxMessageBox
  11. centos 8 配置yum源并安装开发工具包
  12. python获取城市区域边界坐标
  13. 卡拉赞服务器延迟,卡拉赞开荒详细功略(前门)
  14. ip pssql 登录写法_plsql 连接远程服务器数据库无法登录
  15. linux并发控制之顺序锁
  16. ksoftirqid进程CPU100%排查
  17. php 图片印章_给图片加字,印章在线生成
  18. 中标麒麟v7服务器宕机问题分析
  19. 工作日计算器_.NET工作日计算器
  20. 微型计算机及控制技术试题,微型计算机控制技术试卷

热门文章

  1. USB转串口设备linux随笔
  2. Java tif多页文件转jpg问题,Decoding of old style JPEG-in-TIFF data is not supported问题
  3. VS2010 对Excel读写操作
  4. java的变量命名规则_【Java】变量命名规范
  5. 5G NR之SRS Resource Indicator(SRI)天线选择
  6. FastDfs详解及使用
  7. Monkey King(猴王)——可并堆走起
  8. PVT(Pyramid Vision Transformer)学习记录
  9. 从零入门机器学习之Linux系统详解
  10. 转:美元资产面临再暴跌 中国5000多亿美元外汇储备告急