2022-05-29  2022-05-29    7114 字   15 分钟

第六章

微信小程序开发入门

优就业.JAVA教研室

学习目标

  • 了解 微信小程序介绍
  • 掌握微信小程序开发环境准备
  • 掌握微信小程序入门
  • 掌握微信小程序配置文件
  • 掌握微信小程序视图及渲染
  • 掌握微信小程序事件
  • 掌握微信小程序多页面
  • 掌握微信小程序底部导航栏
  • 掌握微信小程序页面跳转及传递参数

一、微信小程序介绍

1.1 什么是微信小程序?

1.2、小程序和移动应用的区别

一、下载

App 从应用商店(如 App Store)里下载;小程序 通过微信(扫描二维码、搜索)直接获得;

二、安装

App 安装在手机内存中,就像自己买了辆车放在车库里随时开;小程序不需要安装,就像免费用嘀嘀打车,召之即来用完拜拜;

三、占用空间

App 会一直存在手机中占用空间,太多的 App 可能会导致内存不足;小程序因为不需要安装,占用内存空间忽略不计;

四、广告推送

App 会隔三差五给用户推送广告,太多未读提示会逼死强迫症;小程序不允许主动给用户发送广告,仅能回复模版消息;

五、机会

App市场已经饱和,几乎所有的领域都已经被覆盖;小程序是一片蓝海,在新的使用场景下有很多瓜分蛋糕的好机会;

六、开发

App 需要适配市场上很多款的主流手机,开发成本大;小程序 一次开发就可以自动适配所有手机;

七、发布

App 需要向十几个应用商店提交审核,且每个应用商店要求的资料都不一样,非常繁琐;小程序 只需要提交到微信公众平台审核 ;

八、用户群

App 面向所有智能手机用户,截止2015年约19亿台;小程序面向所有微信用户,约8亿人 ;

九、开发周期

一款完善的双平台 App 平均的开发周期约3个月;小程序 平均开发周期约2周,仅为App的六分之一;

十、功能

App 可以实现完整功能 ;小程序 仅限微信提供的接口功能;

1.3 什么样的app适合用微信小程序开发?

a、使用频率高而且还很重要不适合用微信小程序,应该用原生的app开发 b、使用频率低而且很重要应该用微信小程序开发 c、使用频率高但是不重要应该用小程序为入口导向原生app d、使用频率不高也不重要优选小程序开发

1.4、微信小程序用到的技术点

a、并不是HTML5/CSS3技术实现

b、抛弃了臃肿的WebView

c、采用了JavaScriptCore动态解析

d、大量借鉴React.js + ReactNative.js思想

1.5、小程序开发的API

https://developers.weixin.qq.com/miniprogram/dev/api/

二、微信小程序的开发准备

2.1、注册微信小程序账号

访问https://mp.weixin.qq.com/cgi-bin/wx进入微信公众平台,点击前往注册

然后根据提示,依次完成以下操作,就注册成功了。注意:一个邮箱只能注册一个小程序。

1、激活邮箱

2、信息登记

3、登录小程序管理后台

4、完善小程序信息

5、绑定开发者

2.2、开发工具使用

2.2.1、微信小程序开发工具下载地址

https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

下载完成以后直接安装即可使用,使用时需要用微信扫描二维码

2.2.2、开发工具使用

打开工具后选择小程序开发,然后点击添加项目,会出现如下页面

点击 + 号,新建小程序

点击 新建按钮,即可新建一个小程序项目

2.2.3、 项目的结构如下

pages/index文件夹下三个文件之间交互(文件夹下的文件要同名)

index.js和index.wxml交互

三、第一个入门程序(HelloWord)

1、新建项目

2、删除生成的全部项目文件

3、新建文件夹在项目下创建src目录,在src下创建pages目录,pages目录下创建index目录

src/pages/index

在该目录下依次创建4个文件

index.js

Page({
  d  ata:{},
  onLoad:function(options){
    //页面初始化调用本方法 options为页面跳转所带来的参数

  },
  onReady:function(){
    //页面渲染完成
  },
  onShow:function(){
    //页面显示
  },
  onHide:function(){
    //页面隐藏
  },
  onUnload:function(){
    //页面关闭调用
  }
})

index.json

{}

index.wxml

Hello World!

index.wxss

/* index.wxss */

4、在项目根目录下创建2个文件

app.js

// app.js

app.json

{
  "pages": [
    "src/pages/index/index"
  ]
}

5、然后编译调试

四、微信小程序的配置文件

4.1、app.json

app.json文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。以下是一个包含了所有配置选项的app.json

app.json配置项列表:

4.1.1、pages

pages接受一个数组,每一项都是字符串,来指定小程序由哪些页面组成。每一项代表对应页面的【路径+文件名】信息,数组的第一项代表小程序的初始页面。小程序中新增/减少页面,都需要对pages数组进行修改。 文件名不需要写文件后缀,因为框架会自动去寻找路径下.json、.js、.wxml、.wxss四个文件进行整合。在创建新页面时,不需要手动新建页面,只需要在pages配置项中新建配置项即可。

注意:

  1. 新建页面时,在pages项中添加新建页面配置项,将会自动创建页面。小程序页面文件夹名与文件名相同。
  2. app.json配置文件中不可以使用单引号,必须用双引号。
  3. 配置文件中不能写注释,只能是代码。

4.1.2、window

用于设置小程序的状态栏、导航条、标题、窗口背景色

4.1.3、tabBar

如果小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面。

Tip: 当设置 position 为 top 时,将不会显示 icon tabBar 中的 list 是一个数组,只能配置最少2个、最多5个 tab,tab 按数组的顺序排序。

属性说明:

其中list接收一个数组,数组中的每个项都是一个对象,属性如下:

4.1.4、networkTimeout

可以设置各种网络请求的超时时间 属性说明:

4.1.5、dubug

可以在开发者工具中开启 debug 模式,在开发者工具的控制台面板,调试信息以 info 的形式给出,其信息有Page的注册,页面路由,数据更新,事件触发 。 可以帮助开发者快速定位一些常见的问题

4.2、page.json

每一个小程序页面也可以使用.json文件来对本页面的窗口表现进行配置。 页面的配置比app.json全局配置简单得多,只是设置 app.json 中的 window 配置项的内容,页面中配置项会覆盖 app.json 的 window 中相同的配置项。 页面的.json只能设置 window 相关的配置项,以决定本页面的窗口表现,所以无需写 window 这个键。例如:

五、视图与渲染

1、组件的基本使用

简单的添加button组件实例,在wxml中添加button组件

<!-- 白色按钮-->
<button type="default" hover-class="test">default</button>
<!-- 绿色按钮-->
<button type="primary">primary</button>
<!-- 红色按钮-->
<button type="warn" >warn</button>

效果:

2、数据绑定

2.1、{{}}绑定数据

数据是通过{{}}来绑定的,在index.js中定义数据

Page({
  data:{
    text:"这里是内容"
  },

然后在index.wxml中获取数据

<text>{{text}}</text>

获取数据的效果

3、渲染标签

微信小程序为我们提供了两种类型的渲染标签,一种是条件标签,一种是循环标签

3.1、条件标签

1、定义if标签

index.wxml

<view wx:if="{{show}}">{{textif}}</view>

index.js

Page({
  data:{
    text:"这里是内容",
    textif:"if判断",
    show:true
  },

当show的值为true,显示

,为fasle不显示

3.2、循环标签

1、创建数组数据

编辑index.js

  data:{
    text:"这里是内容",
    textif:"if判断",
    show:false,
    news: ['aaa','bbb','ccc','ddd']
  }

2、循环遍历显示数据

编辑index.wxml

<view wx:for="{{news}}">这是循环的内容</view>

3、最终效果

4、如果需要显示for中的内容

<view wx:for="{{news}}" wx:for-item="item">
  这是循环的内容
  {{item}}--{{index}}
</view>

通过:wx:for-item 获取遍历的各个节点元素,通过index获取索引

显示效果:

4、模板的使用

我们的小程序中,可能很多页面都是使用同一个顶部与同一个底部,这一部分的代码就可以被很多页面所共用,这种情况下,我们就可以把这部分内容单独提取成一个模板,每个页面都将其加载进来即可。 在Pages目录下新建一个目录名为template,在其下新建一个wxml文件,我们在这个文件里写我们的模板。模板的使用有两种方式

4.1、通过include引入

1、在pages下新建template文件,然后在template中创建header.wxml

<text>这是头布局</text>

2、然后在index.wxml中引入

<include src="../template/header.wxml"/>

3、效果

4.2、通过import引入

1、在template下创建footer.wxml文件

<template name="footer">这是底部布局</template>
<template name="head">这是底部布局</template>

2、在index.wxml中引入

<import src="../template/footer.wxml"/>
<template is="footer"/>
<template is="head"/>

3、效果

六、微信小程序事件

1、什么是事件

事件是视图层到逻辑层的通讯方式。 事件可以将用户的行为反馈到逻辑层进行处理。 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。 事件对象可以携带额外信息,如id, dataset, touches。

2、事件的类别

2.1、点击事件 tap

定义单击事件

修改index.wxml

<button type="primary" bindtap="tapClick">点击事件</button>

修改index.js

  tapClick:function(){
    console.log('响应点击事件')
  }

点击按钮效果:

2.2、长按事件longpress(手指触摸后,超过350ms离开)

定义长按事件

修改index.wxml

<button type="primary" bindlongpress="longClick">长按事件</button>

修改index.js

longClick:function(){
    console.log('长按事件')
  }

效果:

2.3、触摸事件

2.3.1、touchstart 开始触摸

2.3.2、touchmove 手指触摸后移动

2.3.3、touchcansce:取消触摸(只能在真机模拟,在开发工具中没有效果)

2.3.4、touchend:触摸结束

修改index.wxml定义触摸事件

<button type="primary" bindtouchstart="touchstartClick">开始触摸</button>
<button type="primary" bindtouchmove="touchmoveClick">触摸后移动</button>
<button type="primary" bindtouchcancel="touchcancelClick">取消触摸</button>
<button type="primary" bindtouchend="touchendClick">触摸结束</button>

修改index.js增加对应触摸事件处理方法

 touchstartClick:function(){
    console.log('开始触摸')
  },
  touchmoveClick:function(){
    console.log('触摸后移动')
  },
  touchcancelClick:function(){
    console.log('取消触摸')
  },
  touchendClick:function(){
    console.log('触摸结束')
  }

运行效果:

3、事件冒泡

3.1、什么是事件冒泡

点击、长按、触摸都属于冒泡事件,冒泡事件的触发是从子级依次向父级传递

新建页面:demo2.wxml

<view id="parent" bindtap="parentFn">
  <view id="child" bindtap="childFn"></view>
</view>

js文件demo2.js

 /* 父级触发*/
parentFn(event){
  console.log('父级被调用')
 },
 /* 子级触发 */
 childFn(event){
  console.log('子级被调用')
 },

样式文件demo2.wxss

/* src/pages/demo2/demo2.wxss */
#parent{
  width: 200rpx;
  height:200rpx;
  background: red;
 }
 #child{
 
  width: 100rpx;
  height:100rpx;
  background: blue;
 }

测试运行:

点击红色区域,只会调用父级方法

点击蓝色区域,子级和父级方法都被调用

3.2、如何防止事件冒泡

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡

3.2.1、bind绑定;

bindtap bindlongtap bingtouchstart bindtouchmove bindtouchcansce
bindtouchend

3.2.2、catch绑定;(能阻止事件冒泡)

catchtap catchlongtap catchtouchstart catchtouchmove catchtouchcansce catchtouchend

修改文件demo2.wxml

<view id="parent" bindtap="parentFn">
  <view id="child" catchtap="childFn"></view>
</view>

再次测试运行,点击蓝色区域,只会触发调用子级方法

七、微信小程序多页面

7.1、编辑项目文件app.json

新增一个页面test1:

{
  "pages":[
    "pages/index/index",
    "pages/test1/test1",
    "pages/logs/logs"
  ],

保存文件,自动在pages目录下生成test1目录,下面创建了对应的页面和js样式的相关文件

7.2、编辑test1.wxml

<!--pages/test1/test1.wxml-->
<view class="container">  
    <text>这是我的test页面哦哦!!!</text>  
</view>  

7.3、在首页加入跳转连接

<view class="btn-area">  
   <navigator url="/pages/test1/test1" hover-class="navigator-hover">跳转test页面</navigator>  
 </view>  

点击 跳转test页面,即可跳转到test页面

7.4、设置页面标题

设置页面标题 ,是非常简单的一个步骤哦,找到所在页面的目录,找到对应的test1.json

{
  "navigationBarTitleText": "详情页"  
}

navigationBarTitleText属性值及时页面标题

八、微信小程序底部导航栏

底部导航栏,即点击底部的导航,会实现不同对应页面之间的切换。

我们先来看个我们要实现的底部导航栏的效果图:(三个导航图标示例,微信小程序最多能加5个)

8.1、图标准备

阿里图标库 http://www.iconfont.cn/collections/show/29

在这个网站上下载一些自己要用到的图标,比如人员头像,home主页等一些常用的图标,直接点击下载保存到本地,修改一下命名。也可以使用UI准备好的图标。

回到项目里,新建一个images文件夹,将刚刚下载好的图标放在文件夹底下备用,将上述起好名字的图标 保存到 小程序 项目目录中 新创建的 images 文件夹中,准备工作就做好了。

8.2、添加底部导航栏配置文件

我们找到项目根目录中的配置文件 app.json 加入如下配置信息

  "tabBar": {
    "color": "#a9b7b7",
    "selectedColor": "#11cd6e",
    "borderStyle": "white",
    "list": [
      {
        "selectedIconPath": "images/0.png",
        "iconPath": "images/0.png",
        "pagePath": "pages/index/index",
        "text": "首页"
      },
      {
        "selectedIconPath": "images/1.png",
        "iconPath": "images/1.png",
        "pagePath": "pages/logs/logs",
        "text": "日志"
      },
      {
        "selectedIconPath": "images/2.png",
        "iconPath": "images/2.png",
        "pagePath": "pages/test1/test1",
        "text": "测试"
      }
    ]
  },

8.3、测试效果如下

点击各个图标,即可切换到各个页面

注意添加了tabBar原理的页面链接跳转,需要增加设置tabBar属性

 <view class="btn-area">  
   <navigator url="/pages/test1/test1"   open-type="switchTab" hover-class="navigator-hover">跳转test页面</navigator>  

设置属性:open-type=“switchTab” 表示是tabBar切换

九、微信小程序页面跳转及传递参数

1、navigator 跳转时传参

在wxml页面跳转时候,可以在跳转地址后,传递参数:

<view class="btn-area">  
   <navigator url="/pages/test2/test2?id=1001&name=张三"   hover-class="navigator-hover">跳转test页面</navigator>  
 </view>  

注意:不能tabBar地址传参

在对应跳转到的页面的test2.js的

 onLoad: function (options) {
    var id=options.id
    var name=options.name
    console.log('id:'+id+" name:"+name)
  },

演示效果:

2、在js代码里navigator 跳转时

修改index.js

 toTest2: function(){
    wx.navigateTo({
      url: '../test2/test2?id=1001&name=张三',
    })
  }

修改index.wxml

 <view>
   <button bindtap="toTest2">点击跳转</button>
 </view>

对应test.js接收参数

 onLoad: function (options) {
    var id=options.id
    var name=options.name
    console.log('id:'+id+" name:"+name)
  },

测试效果:

3、在js代码里redirectTo跳转时

修改index.wxml

<view>
   <button bindtap="toTest22">点击跳转2</button>
 </view>

修改index.js

 toTest22: function(){
    wx.redirectTo({
      url: '../test2/test2?id=1001&name=张三',
    })
  }

测试效果:

4、带有tagbar的页面跳转

需要用到switchTab(object)来实现

修改index.wxml

 <view>
   <button bindtap="toLog">点击跳转tagbar查看日志</button>
 </view>

修改index.js

 toLog: function(){
    wx.switchTab({
      url: '../logs/logs',
    })
  },

注意需要配置app.json配置对应的tagBar

"tabBar": {
    "color": "#a9b7b7",
    "selectedColor": "#11cd6e",
    "borderStyle": "white",
    "list": [
      {
        "selectedIconPath": "images/0.png",
        "iconPath": "images/0.png",
        "pagePath": "pages/index/index",
        "text": "首页"
      },
      {
        "selectedIconPath": "images/1.png",
        "iconPath": "images/1.png",
        "pagePath": "pages/logs/logs",
        "text": "日志"
      },
      {
        "selectedIconPath": "images/2.png",
        "iconPath": "images/2.png",
        "pagePath": "pages/test1/test1",
        "text": "测试"
      }
    ]
  },

5、使用全局变量共享参数

修改app.js

App({  
  globalData: {
    userInfo: null,
    id: null 
  }
})

在js里面可以给全局变量赋值:

修改index.js 在onLoad方法中增加给全局变量赋值代码:

var app = getApp();
app.globalData.id = 2

修改test2.js获取全局变量的值

var app = getApp();
//获取全局变量
console.log("全局变量id:"+app.globalData.id)

演示:

6、列表index下标取值

修改页面index.wxml

 <view>
  <button bindtap='clickMe' data-id='1'>点击</button>
 </view>

注意:通过wxml设置data-[参数名]传递参数,[参数名]只能是小写,不能有大写

修改index.js

 clickMe: function(e){
     var id = e.currentTarget.dataset.id
    console.log("获取到传递参数:"+id);
  }

演示效果:

十、微信小程序发出网络请求

1、网络请求对象wx.request

wx.request(OBJECT)发起的是https请求。一个微信小程序,同时只能有5个网络请求连接。 OBJECT参数说明:

wx.request({
  url: 'http://192.168.1.137:80/app/guanggao',
  method: 'POST',
  data: {
     type: "1"
  },
  header: {
    'Accept': 'application/json'
  },
  success: function (res) {
    that.setData({
      images: res.data.data.guanggao
    })
  }
  fail:function(err){
    console.log(err)
  }
})

上面的代码会发送一个http get请求,其中的参数也比较容易理解。

  • url 服务器的url地址
  • data 请求的参数可以采用String data:”xxx=xxx&xxx=xxx”的形式或者Object data:{“userId”:1}的形式
  • header 设置请求的header
  • method http的方法,默认为GET请求
  • success 接口成功的回调
  • fail 接口失败的回调

注意首先配置本地微信开发工具,不校验合法域名

在页面增加一个按钮:

 <!-- 发出网络请求 -->
 <view>
   <button bindtap="clicknetwork">点我发出网络请求</button>
 </view>

编写请求方法:

 clicknetwork:function(){
   wx.request({
     url: 'http://localhost:10001/context/banner/list',
     method: 'POST',
     success:function(res){
         console.log(res)
     }
   })
 }

测试结果:


avatar
青山
悟已往之不谏 知来者之可追
一言
今日诗词
站点信息
本站访客数 :
本站总访问量 :