继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

微信小程序项目实战:新手入门到初级开发者

胡说叔叔
关注TA
已关注
手记 458
粉丝 130
获赞 581
概述

本文详细介绍了微信小程序项目实战的全流程,从开发环境搭建到项目创建,再到页面开发和组件使用,帮助开发者快速上手。文章还涵盖了小程序的数据存储、网络请求以及发布和调试技巧,旨在为开发者提供全面的微信小程序开发指导。

微信小程序简介及开发环境搭建
微信小程序介绍

微信小程序是一种无需下载安装即可使用的应用,其具有跨平台性、轻量级和开发成本低等优点。小程序的出现极大地提升了用户的使用体验,同时也降低了开发者的开发门槛。微信小程序的主要特点包括:

  • 跨平台性:小程序可以在多种设备上运行,包括手机、平板和电脑等。
  • 轻量级:小程序体积小,启动速度快。
  • 开发成本低:相较于原生应用,小程序的开发成本较低。
  • 无需安装:用户无需下载和安装,直接通过微信扫码即可使用。

微信小程序的开发采用JavaScript、WXML(WeiXin Markup Language)和WXSS(WeiXin Style Sheets)等技术栈,开发工具支持Windows、Mac和Linux。

开发工具的下载与安装

微信小程序的开发需要使用微信开发者工具,以下是下载和安装步骤:

下载微信开发者工具

  1. 访问微信官方开发者工具的下载页面:

  2. 根据你的操作系统选择对应的安装包下载。

安装微信开发者工具

  1. 下载完成后,双击安装包进行安装。
  2. 在安装向导中,按照提示步骤完成安装。安装完成后,可以在桌面上找到微信开发者工具的快捷方式。

使用微信开发者工具

  1. 打开微信开发者工具,创建一个新的小程序项目。
  2. 在登录页面输入微信号或开发者邮箱,进行登录。
  3. 登录后,在主界面选择“新建” -> “小程序”。
  4. 填写小程序的AppID(如果没有AppID,可以先创建一个测试账号,获取临时的AppID),选择项目名称和项目目录,点击确定。
  5. 开发者工具会自动下载必要的文件,下载完成后,就可以开始编写代码了。
创建第一个小程序项目

创建一个新的小程序,步骤如下:

  1. 打开微信开发者工具,点击“新建”,选择“小程序”。
  2. 填写项目名称和AppID(如果没有AppID,使用测试账号的临时AppID)。
  3. 选择项目目录,点击确定。
  4. 开发者工具会自动下载并创建项目的基本文件结构。
  5. 在项目根目录下,打开app.json,配置小程序的基本信息,如页面列表、窗口表现等。
  6. app.js中,编写小程序的全局逻辑。
  7. app.wxss中,编写小程序的全局样式。

示例代码

app.json示例:

{
  "pages": [
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "小程序示例",
    "navigationBarTextStyle": "#000000"
  },
  "tabBar": {
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页",
        "iconPath": "images/home.png",
        "selectedIconPath": "images/home-active.png"
      },
      {
        "pagePath": "pages/logs/logs",
        "text": "日志",
        "iconPath": "images/logs.png",
        "selectedIconPath": "images/logs-active.png"
      }
    ],
    "color": "#000000",
    "selectedColor": "#000000",
    "borderStyle": "black"
  }
}

app.js示例:

// 全局逻辑
App({
  onLaunch: function () {
    console.log('小程序启动');
  },
  onShow: function () {
    console.log('小程序显示');
  },
  onHide: function () {
    console.log('小程序隐藏');
  },
  globalData: {
    userInfo: null
  }
});

app.wxss示例:

/* 全局样式 */
body {
  background-color: #eee;
}

通过以上步骤,可以成功创建并运行第一个微信小程序项目。

微信小程序的基本组成部分
项目结构解析

微信小程序的项目结构主要包括以下几个关键文件和目录:

  • app.json:配置小程序的基本设置,如页面列表、窗口表现、TabBar等。
  • app.js:小程序的全局逻辑文件,包括App构造函数、全局变量、页面间的数据传递等。
  • app.wxss:小程序的全局样式文件。
  • pages/:页面文件夹,每个页面包含jswxmlwxssjson四个文件。
  • utils/:工具文件夹,用于存放公共的工具函数。
  • project.config.json:项目配置文件,用于保存项目的配置信息。
  • project-name/:项目根目录,包含所有的文件和目录。
  • images/:图片文件夹,用于存放图片资源。

示例代码

app.json示例:

{
  "pages": [
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "小程序示例",
    "navigationBarTextStyle": "#000000"
  },
  "tabBar": {
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页",
        "iconPath": "images/home.png",
        "selectedIconPath": "images/home-active.png"
      },
      {
        "pagePath": "pages/logs/logs",
        "text": "日志",
        "iconPath": "images/logs.png",
        "selectedIconPath": "images/logs-active.png"
      }
    ],
    "color": "#000000",
    "selectedColor": "#000000",
    "borderStyle": "black"
  }
}

app.js示例:

// 全局逻辑
App({
  onLaunch: function () {
    console.log('小程序启动');
  },
  onShow: function () {
    console.log('小程序显示');
  },
  onHide: function () {
    console.log('小程序隐藏');
  },
  globalData: {
    userInfo: null
  }
});

app.wxss示例:

/* 全局样式 */
body {
  background-color: #eee;
}
``

### 页面文件夹结构

每个页面文件夹中包含以下四个文件:

- `js`:页面逻辑文件,包含页面的生命周期、数据、方法等。
- `wxml`:页面结构文件,用于描述页面的布局和组件。
- `wxss`:页面样式文件,用于定义页面的样式和布局。
- `json`:页面配置文件,用于定义页面的配置信息。

### 示例代码

页面文件夹示例:

pages/
├── index/
│ ├── index.js
│ ├── index.wxml
│ ├── index.wxss
│ └── index.json
└── logs/
├── logs.js
├── logs.wxml
├── logs.wxss
└── logs.json


`index.js`示例:

```javascript
// 页面逻辑
Page({
  data: {
    motto: 'Hello World',
    userInfo: {}
  },
  onLoad: function () {
    console.log('页面加载');
  },
  onReady: function () {
    console.log('页面渲染');
  },
  onShow: function () {
    console.log('页面显示');
  },
  onHide: function () {
    console.log('页面隐藏');
  },
  onUnload: function () {
    console.log('页面卸载');
  },
  bindViewTap: function () {
    wx.navigateTo({
      url: '../logs/logs'
    });
  }
});

index.wxml示例:

<!-- 页面结构 -->
<view class="container">
  <text>{{motto}}</text>
  <button type="primary" bindtap="bindViewTap">跳转到日志页面</button>
</view>

index.wxss示例:

/* 页面样式 */
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

index.json示例:

{
  "navigationBarTitleText": "首页",
  "enablePullDownRefresh": true
}
小程序页面(Page)编写

页面生命周期

小程序的页面组件(Page)有多个生命周期方法,这些方法会在不同的阶段被调用。常用的生命周期方法包括:

  • onLoad:页面加载时调用。
  • onReady:页面渲染完毕后调用。
  • onShow:页面显示时调用。
  • onHide:页面隐藏时调用。
  • onUnload:页面卸载时调用。

示例代码

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World',
    userInfo: {}
  },
  onLoad: function () {
    console.log('页面加载');
  },
  onReady: function () {
    console.log('页面渲染');
  },
  onShow: function () {
    console.log('页面显示');
  },
  onHide: function () {
    console.log('页面隐藏');
  },
  onUnload: function () {
    console.log('页面卸载');
  }
});

页面间的数据传递

页面间的数据传递可以通过全局变量App对象或者通过事件进行传递。

通过全局变量传递数据

可以在App对象中定义全局变量,然后在不同的页面中使用。

app.js示例:

// 全局逻辑
App({
  globalData: {
    userInfo: null
  }
});

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  onLoad: function () {
    console.log('页面加载');
    // 获取全局变量
    let userInfo = getApp().globalData.userInfo;
    console.log(userInfo);
  }
});

通过事件传递数据

通过事件触发,可以在一个页面中传递数据到另一个页面。

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  bindViewTap: function () {
    wx.navigateTo({
      url: '../logs/logs',
      events: {
        acceptDataFromOpenedPage: function(data) {
          console.log(data);
        },
        someEvent: function(data) {
          console.log(data);
        }
      },
      success: function(res) {
        // the returned res object contains the return data from the launched page.
        console.log(res.eventChannel.emit)
      },
      fail: function(res) {
        console.log('navigateTo failed!');
      }
    });
  }
});

logs.js示例:

// 页面逻辑
Page({
  data: {
    logs: []
  },
  onLoad: function () {
    console.log('页面加载');
    wx.getExtConfig({
      success: function(res) {
        console.log(res.extConfig);
        // 将数据传递给父页面
        let eventChannel = this.getOpenerEventChannel();
        eventChannel.emit('acceptDataFromOpenedPage', { data: '传递的数据' });
      }
    });
  }
});

页面交互设计

页面交互设计主要包括点击、滑动、输入等交互方式。这些交互可以通过事件绑定实现。

点击事件

点击事件可以通过bindtap进行绑定。

index.wxml示例:

<!-- 页面结构 -->
<view class="container">
  <text>{{motto}}</text>
  <button type="primary" bindtap="bindViewTap">跳转到日志页面</button>
</view>

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  bindViewTap: function () {
    wx.navigateTo({
      url: '../logs/logs'
    });
  }
});

滑动事件

滑动事件可以通过bindtouchstartbindtouchmovebindtouchend进行绑定。

index.wxml示例:

<view class="container" bindtouchstart="touchStart" bindtouchmove="touchMove" bindtouchend="touchEnd">
  <text>{{motto}}</text>
</view>

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  touchStart: function (e) {
    console.log('touchStart:', e);
  },
  touchMove: function (e) {
    console.log('touchMove:', e);
  },
  touchEnd: function (e) {
    console.log('touchEnd:', e);
  }
});
小程序组件(Component)使用

小程序的组件分为内置组件和自定义组件。内置组件由微信官方提供,可以直接使用。自定义组件可以由开发者自己定义。

内置组件

内置组件分为基础组件和导航组件。基础组件包括viewtextbuttonimage等,导航组件包括navigator等。

示例代码

index.wxml示例:

<view class="container">
  <text>{{motto}}</text>
  <button type="primary" bindtap="bindViewTap">跳转到日志页面</button>
  <navigator url="../logs/logs">跳转到日志页面(navigator)</navigator>
</view>

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  bindViewTap: function () {
    wx.navigateTo({
      url: '../logs/logs'
    });
  }
});

自定义组件

自定义组件需要定义Component构造函数,并通过Component方法进行注册。

示例代码

自定义组件my-component的定义:

my-component.js示例:

// 自定义组件
Component({
  properties: {
    text: {
      type: String,
      value: '默认文本'
    }
  },
  data: {
    motto: 'Hello World'
  },
  methods: {
    handleClick: function (e) {
      console.log('点击了自定义组件');
    }
  }
});

自定义组件的使用:

index.wxml示例:

<view class="container">
  <my-component text="自定义组件" bindtap="handleClick"></my-component>
</view>

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  }
});

通过以上步骤,可以成功创建并使用自定义组件。

事件处理与页面交互
事件绑定方式

小程序中的事件绑定主要有两种方式:bindtapcatchtap

bindtap绑定事件

bindtap用于绑定点击事件,当点击事件触发时,会调用绑定的方法。

示例代码

index.wxml示例:

<view class="container">
  <button type="primary" bindtap="bindViewTap">跳转到日志页面</button>
</view>

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  bindViewTap: function () {
    wx.navigateTo({
      url: '../logs/logs'
    });
  }
});

catchtap阻止事件冒泡

catchtap用于阻止事件冒泡,即阻止事件向父节点传递。

示例代码

index.wxml示例:

<view class="container">
  <button type="primary" catchtap="bindViewTap">阻止事件冒泡</button>
</view>

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  bindViewTap: function () {
    console.log('阻止事件冒泡');
  }
});
页面间的数据传递

页面间的数据传递可以通过全局变量App对象或者通过事件进行传递。

通过全局变量传递数据

可以在App对象中定义全局变量,然后在不同的页面中使用。

app.js示例:

// 全局逻辑
App({
  globalData: {
    userInfo: null
  }
});

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  onLoad: function () {
    console.log('页面加载');
    // 获取全局变量
    let userInfo = getApp().globalData.userInfo;
    console.log(userInfo);
  }
});

通过事件传递数据

通过事件触发,可以在一个页面中传递数据到另一个页面。

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  bindViewTap: function () {
    wx.navigateTo({
      url: '../logs/logs',
      events: {
        acceptDataFromOpenedPage: function(data) {
          console.log(data);
        },
        someEvent: function(data) {
          console.log(data);
        }
      },
      success: function(res) {
        // the returned res object contains the return data from the launched page.
        console.log(res.eventChannel.emit)
      },
      fail: function(res) {
        console.log('navigateTo failed!');
      }
    });
  }
});

logs.js示例:

// 页面逻辑
Page({
  data: {
    logs: []
  },
  onLoad: function () {
    console.log('页面加载');
    wx.getExtConfig({
      success: function(res) {
        console.log(res.extConfig);
        // 将数据传递给父页面
        let eventChannel = this.getOpenerEventChannel();
        eventChannel.emit('acceptDataFromOpenedPage', { data: '传递的数据' });
      }
    });
  }
});
页面交互设计

页面交互设计主要包括点击、滑动、输入等交互方式。这些交互可以通过事件绑定实现。

点击事件

点击事件可以通过bindtap进行绑定。

index.wxml示例:

<view class="container">
  <text>{{motto}}</text>
  <button type="primary" bindtap="bindViewTap">跳转到日志页面</button>
</view>

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  bindViewTap: function () {
    wx.navigateTo({
      url: '../logs/logs'
    });
  }
});

滑动事件

滑动事件可以通过bindtouchstartbindtouchmovebindtouchend进行绑定。

index.wxml示例:

<view class="container" bindtouchstart="touchStart" bindtouchmove="touchMove" bindtouchend="touchEnd">
  <text>{{motto}}</text>
</view>

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  touchStart: function (e) {
    console.log('touchStart:', e);
  },
  touchMove: function (e) {
    console.log('touchMove:', e);
  },
  touchEnd: function (e) {
    console.log('touchEnd:', e);
  }
});
样式与布局
样式文件(wxss)的使用

小程序的样式文件使用wxss格式,类似于CSS,但是有一些特殊的语法。

基本用法

样式文件中可以定义全局样式和页面局部样式。

app.wxss示例:

/* 全局样式 */
body {
  background-color: #eee;
}

/* 局部样式 */
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

常用属性

  • display:定义元素的显示方式。
  • flex:定义弹性布局。
  • align-items:定义子元素在交叉轴(垂直方向)的对齐方式。
  • justify-content:定义子元素在主轴(水平方向)的对齐方式。
  • height:定义元素的高度。

常用选择器

  • .:类选择器,用于选择具有特定类名的元素。
  • #:ID选择器,用于选择具有特定ID的元素。
  • ::伪类选择器,用于选择特定状态下的元素。

示例代码

app.wxss示例:

/* 全局样式 */
body {
  background-color: #eee;
}

/* 局部样式 */
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

.button {
  margin-top: 20px;
}

响应式布局

响应式布局可以根据不同的屏幕尺寸自适应布局。

使用媒体查询

app.wxss示例:

/* 基础样式 */
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

.button {
  margin-top: 20px;
}

/* 媒体查询 */
@media only screen and (max-width: 320px) {
  .container {
    font-size: 12px;
  }
}

@media only screen and (min-width: 321px) and (max-width: 768px) {
  .container {
    font-size: 14px;
  }
}

@media only screen and (min-width: 769px) {
  .container {
    font-size: 16px;
  }
}

使用flex布局

flex布局可以实现灵活的布局设计。

基本用法

app.wxss示例:

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

.button {
  margin-top: 20px;
}

主轴和交叉轴

  • 主轴:默认为水平方向,可以通过flex-direction属性调整。
  • 交叉轴:默认为垂直方向,可以通过justify-contentalign-items属性调整。

示例代码

app.wxss示例:

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

.button {
  margin-top: 20px;
}

.flex-container {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  width: 100%;
  height: 100px;
}

.flex-item {
  width: 100px;
  height: 100px;
  background-color: #ff0000;
  margin: 10px;
}

通过以上步骤,可以成功使用wxss进行页面的样式设计和布局。

数据存储与网络请求
本地存储(Storage)使用

小程序提供了Storage接口来实现数据的本地持久化存储。常用的Storage接口包括setStoragegetStorageremoveStorageclear等。

示例代码

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  onLoad: function () {
    console.log('页面加载');
    // 存储数据
    wx.setStorage({
      key: 'username',
      data: '张三',
      success: function () {
        console.log('数据存储成功');
      }
    });

    // 读取数据
    wx.getStorage({
      key: 'username',
      success: function (res) {
        console.log('数据读取成功:', res.data);
      }
    });

    // 删除数据
    wx.removeStorage({
      key: 'username',
      success: function () {
        console.log('数据删除成功');
      }
    });

    // 清空所有数据
    wx.clearStorage({
      success: function () {
        console.log('所有数据清空');
      }
    });
  }
});
网络请求(Request)实现

小程序提供了request接口来进行网络请求。常用的request接口包括wx.requestwx.uploadFilewx.downloadFile等。

示例代码

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  onLoad: function () {
    console.log('页面加载');
    // 发起网络请求
    wx.request({
      url: 'https://example.com/api/data',
      method: 'GET',
      data: {
        key: 'value'
      },
      success: function (res) {
        console.log('请求成功:', res.data);
      },
      fail: function (err) {
        console.log('请求失败:', err);
      }
    });
  }
});
第三方数据接口调用

调用第三方数据接口的步骤基本与调用小程序内置接口一致,只是需要根据第三方接口的文档进行参数设置。

示例代码

index.js示例:

// 页面逻辑
Page({
  data: {
    motto: 'Hello World'
  },
  onLoad: function () {
    console.log('页面加载');
    // 发起网络请求调用第三方数据接口
    wx.request({
      url: 'https://api.example.com/data',
      method: 'GET',
      data: {
        key: 'value'
      },
      header: {
        'content-type': 'application/json' // 默认值
      },
      success: function (res) {
        console.log('请求第三方接口成功:', res.data);
      },
      fail: function (err) {
        console.log('请求第三方接口失败:', err);
      }
    });
  }
});

通过以上步骤,可以成功实现小程序的本地存储和网络请求。

小程序发布与调试技巧
如何提交小程序审核

提交小程序审核需要先进行基础配置和测试,确保小程序的功能和界面符合要求。

基础配置

  1. 登录微信小程序管理后台,选择需要提交的小程序。
  2. 进入“设置”页面,填写小程序的基础信息,包括小程序名称、AppID、版本号等。
  3. 在“开发设置”页面,填写服务器域名、HTTPS安全域名等。
  4. 在“开发管理”页面,设置开发者的邮箱和手机号,以便接收审核通知。

提交审核

  1. 在小程序管理后台,点击“提交审核”按钮。
  2. 填写提交信息,包括审核版本号、审核的详细说明等。
  3. 提交审核后,微信团队会进行审核,审核通过后,会在管理后台收到通知。

示例代码

提交审核后,可以在管理后台查看审核状态,如下图所示:

审核状态

调试技巧与常见问题排查

调试小程序时,可以通过开发者工具提供的功能进行调试,如控制台、网络请求、性能分析等。

控制台输出

在小程序中,可以通过console.log输出调试信息。

console.log('调试信息:', data);

网络请求调试

开发者工具中提供了网络请求调试的功能,可以在“网络”面板中查看请求和响应信息。

性能分析

开发者工具中提供了性能分析的功能,可以通过“性能”面板查看CPU、内存等信息。

常见问题排查

  1. 页面加载失败:检查app.json中的页面路径是否正确。
  2. 数据请求失败:检查请求的URL是否正确,请求的参数是否符合要求。
  3. 页面布局错乱:检查样式文件中的CSS是否正确。
  4. 内存泄漏:检查页面中是否有长时间运行的定时任务或者大量的DOM操作。
小程序上线后的维护与更新

小程序上线后,需要进行定期的维护和更新,以确保功能的正常运行。

定期维护

  1. 监控小程序的运行状态,及时发现并处理问题。
  2. 收集用户反馈,改进用户体验。
  3. 更新内容,保持小程序的新鲜感。

更新流程

  1. 在开发者工具中,点击“上传代码”按钮,上传新的代码包。
  2. 在小程序管理后台,点击“发布新版”按钮,填写版本号和更新说明。
  3. 提交审核,审核通过后,新版小程序会自动发布。

示例代码

app.js示例:

App({
  onLaunch: function () {
    console.log('小程序启动');
  },
  onShow: function () {
    console.log('小程序显示');
  },
  onHide: function () {
    console.log('小程序隐藏');
  },
  globalData: {
    userInfo: null
  }
});

通过以上步骤,可以成功维护和更新小程序。

通过以上内容,你可以从新手入门到成为初级开发者,掌握微信小程序的开发和维护。希望你能在开发过程中遇到的挑战和乐趣,不断学习和进步。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP