微信小程序相关

目录

一、WXML与HTML的异同

二、WXSS和CSS的异同

三、微信小程序主要目录和文件的作用

四、小程序的双向绑定和vue的异同

五、微信小程序有哪些传值(传递数据)方法

六、小程序的生命周期函数

APP生命周期

Page生命周期

Component生命周期

七、小程序的原理

八、小程序的特点和优势

九、小程序与H5的区别

十、小程序和Vue写法的区别

十一、哪些方法可以提高小程序的应用速度

十二、小程序与原生App对比

十三、常用API

1. 页面跳转:

2. 网络请求:

3. 用户信息:

4. 设备信息:

5. 界面交互:

6. 媒体文件:

7. 支付:

8. 缓存:

十四、小程序的发布流程(开发流程)

常见问题

一、WXML与HTML的异同

同:

  1. 都是页面渲染语言,都使用类似的标签和属性描述网页的结构和内容
  2. 结构化文档:都支持将文档分为不同的元素和部分
  3. 样式与行为分离

异:

  1. 平台:WXML主要用于微信小程序开发,是微信小程序的一部分;HTML主要用于Web开发,用于构建网页
  2. 标签和属性:WXML是针对微信小程序,如`<view>`、`<text>`等标签,wx:if、wx:for等属性;HTML包含用于构建网页的通用标签和属性,如`<div>`、`<span>`、`<p>`等
  3. 小程序没有DOM树和window对象
  4. 标签名字不一样,且小程序标签更少,单一标签更多

二、WXSS和CSS的异同

WXSS(微信小程序样式表)和CSS(层叠样式表)

同:

  1. 样式定义:都定义页面元素的样式,包括字体、颜色、大小、布局
  2. 选择器:都使用选择器,例如标签选择器、类选择器、ID选择器等
  3. 属性和值:都使用类似的属性和值。如,`color`属性用于定义文本颜色,`font-size`属性用于定义字体大小等

异:

  1. 平台:WXSS主要用于微信小程序开发;CSS主要用于Web开发
  2. 单位:WXSS支持rpx;CSS使用px、em、rem。rpx是微信小程序中专门为适配不同屏幕尺寸而设计的单位,比px更加灵活
  3. WXSS仅支持部分CSS选择器,如,不支持::after伪元素
  4. WXSS提供全局样式与局部样式

三、微信小程序主要目录和文件的作用

1. app.json:全局配置文件,包括页面路径、窗口样式、导航栏样式、网络超时时间等。它定义了小程序的整体结构和行为

2. app.js:全局逻辑文件,如小程序的生命周期函数、全局数据等。可以定义App()函数,用于注册小程序的生命周期函数和全局数据

3. app.wxss:全局样式文件

4. pages目录:存放各个页面。每个页面通常包括一个.wxml文件(页面结构)、一个.js文件(页面逻辑)、一个.wxss文件(页面样式)和一个.json文件(页面配置)

5. utils目录:存放工具函数和公共代码。可以存放一些常用的函数、网络请求封装等

6. images目录:存放图片资源。

7. app.acss:对于使用了支付宝小程序的开发者,该文件用于定义小程序的全局样式,与app.wxss功能类似,但是针对支付宝小程序。

四、小程序的双向绑定和vue的异同

同:

1. 都是实现数据的双向绑定,即数据的改变可以自动更新到视图,视图的改变也可以自动更新到数据

2. 简化开发:简化开发流程,减少手动操作DOM的需求,提高开发效率

异:

1. 实现方式:在小程序通常需要手动监听数据变化,手动更新视图;Vue双向绑定是框架内置的特性,无需手动处理,框架会自动进行数据监听和更新视图

2. 响应式系统:小程序需要通过setData()方法手动更新数据;Vue通过数据劫持和依赖追踪实现数据的监听和更新

3. 语法:小程序 value="{{data}}" bindinput="setData";Vue是v-model="data"

4. 生命周期:小程序页面手动编写,手动调用;Vue由框架自动调用

5. 跨平台:小程序主要用于微信平台;Vue用于Web开发、移动端开发等多种平台。

五、微信小程序有哪些传值(传递数据)方法

1. URL 参数传递:在页面路径后面添加参数进行传值,例如:/pages/index/index?id=1&name=abc,在目标页面的 onLoad 生命周期中可以通过 options 参数获取传递的值

2. Storage 存储:使用 wx.setStorageSync 或 wx.setStorage 方法将数据存储到本地缓存中,在目标页面中使用 wx.getStorageSync 或 wx.getStorage 方法获取数据

3. 全局数据传递:数据存储在 App 实例中的 globalData 属性中,在目标页面中使用 getApp().globalData 获取数据

4. 事件传递:通过触发事件来传递数据,例如在子组件中触发一个自定义事件,并通过事件对象传递数据,在父组件中监听该事件并获取传递的数据

5. 页面栈传递:使用小程序提供的页面栈来传递数据,通过 getCurrentPages 方法获取页面栈的实例,使用 data 属性存储数据,在目标页面中使用 options 获取数据

在跳转的时候,还可以通过传递参数来实现数据的传递,一般有以下两种方式:

1. Query 参数传递:适用于传递简单的参数,如页面之间的关联 ID、状态等。

在通过wx.navigateTo()wx.redirectTo()等方法跳转页面时,可以在目标页面的路径后面附加查询参数,如:

wx.navigateTo({
  url: '/pages/detail/detail?id=123&name=test'
})

目标页面可以通过onLoad生命周期函数的 options 参数获取到传递的查询参数,如:

onLoad: function(options) {
  console.log(options.id); // 输出 123
  console.log(options.name); // 输出 test
}

2. 页面栈传递:适用于传递复杂的数据对象或者在页面关闭后需要回传数据的情况

在跳转时,通过 wx.navigateTo({ url: 'pages/detail/detail', query: { id: 123 } }) 将参数传递到目标页面,然后在目标页面中,通过 getCurrentPages()[getCurrentPages().length - 1].options 获取参数,如 var id = getCurrentPages()[getCurrentPages().length - 1].options.id

六、小程序的生命周期函数

APP生命周期
  • onLaunch(options):小程序初始化时调用,可以获取打开小程序的场景值、query参数等

  • onShow(options):小程序启动或从后台进入前台时调用,可以获取打开小程序的场景值、query参数等

Page生命周期

Component生命周期

  • onLoad(options):页面加载时调用,可以获取上个页面传递的参数等

  • onShow():页面显示时调用

  • onReady():页面初次渲染完成时调用

  • onHide():页面隐藏时调用

  • onUnload():页面卸载时调用

  • created():组件实例刚刚被创建时调用,可以在这个函数中定义组件的数据和方法等

  • attached():组件被添加到页面中时调用

  • ready():组件初次渲染完成时调用

  • moved():组件被移动到另外一个节点时调用

  • detached():组件被从页面中移除时调用

七、小程序的原理

1. 运行环境:是微信客户端内置的一个轻量级的JavaScript引擎,用于解析和执行小程序的代码。这个JavaScript引擎提供了一系列的API,使得小程序能够与微信客户端进行交互

2. 开发工具:提供了专门的开发工具

3. 框架支持:类似于前端框架的开发模式,类似于HTML、CSS和JavaScript的语法和组件系统

4. 渲染机制:类似于Web开发的渲染方式,使用了类似于HTML的WXML(微信小程序标记语言)来描述页面的结构,使用了类似于CSS的WXSS(微信小程序样式表)来定义页面的样式,使用了类似于JavaScript的逻辑语法来实现页面的逻辑功能

5. 数据通信:可以通过网络请求和微信客户端进行数据通信。开发者可以使用微信提供的API来发送HTTP请求,获取和上传数据。同时,微信小程序还提供了一些特定的API,如获取用户信息、支付等,方便开发者与微信平台进行交互。

6. 安全机制:如,代码会经过微信平台的审核;网络请求受到跨域和HTTPS的限制;用户身份验证和权限管理。

八、小程序的特点和优势

快速启动、低内存、无需安装、跨平台支持、强大的生态系统

九、小程序与H5的区别

1. 开发语言和框架:WXML和WXSS,微信开发者工具;HTML、CSS和JavaScript,使用网页浏览器进行开发和调试。

2. 执行环境和性能:微信客户端,可以直接使用微信客户端提供的能力,如地理位置、支付等;在浏览器中运行,受限于浏览器的性能和能力

3. 可访问性:只能在微信客户端中访问;通过浏览器访问

4.可扩展性:微信小程序功能和扩展性受到限制。必须符合微信小程序的规范和限制,经过微信审核才能发布;H5则更加灵活,可以随意扩展和定制,没有限制

5. 开发成本不同:H5需要兼容不同的浏览器

十、小程序和Vue写法的区别

  1. 开发模式:小程序需要使用微信开发者工具进行开发和调试;Vue可以在浏览器中使用webpack等工具进行开发和调试。

  2. 语法:小程序使用WXML和WXSS语言;Vue使用HTML、CSS和JavaScript

  3. 组件化:都支持组件化的开发方式。小程序的组件化主要是通过Component方法进行定义和注册;Vue通过Vue.component方法进行定义和注册。在使用组件时,小程序需要使用组件的名称进行调用;Vue通过组件的标签名称进行调用

  4. 状态管理:小程序使用的是原生的数据绑定方式,即通过setData方法进行数据的修改和更新;Vue使用的是Vue.js提供的响应式数据绑定和Vuex状态管理机制

如:

遍历:小程序wx:for="list";Vue是v-for="item in list"

调用data模型(赋值)的时候:

小程序:this.data.item // 调用,this.setDate({item:1})//赋值

Vue:this.item //调用,this.item=1 //赋值

十一、哪些方法可以提高小程序的应用速度

  • 提高页面的加载速度:预加载页面或组件,分包加载
  • 减少网络请求和数据传输:减少默认的data的大小
  • 优化代码逻辑和性能:节流和防抖,异步编程和Promise,避免复杂计算
  • 优化渲染性能:减少页面层级和组件数量

十二、小程序与原生App对比

小程序的优点:

  1. 基于微信平台开发,享受微信自带的流量,这个优点最大
  2. 无需安装,不占手机内存,体验好
  3. 开发周期段,一般最多一个月就可以上线完成
  4. 开发所需的资金少,是开发原生APP的一半不到
  5. 小程序名称是唯一的,在微信的搜索里权重很高
  6. 容易上手,只要之前有HTML+CSS+JS基础知识,写小程序基本没有大问题
  7. 基本不需要考虑兼容性问题
  8. 发布,审核高效,基本上午发布审核,下午就审核通过,升级简单,支持灰度发布
  9. 开发文档完善,社区活跃
  10. 支持插件式开发,一些基本功能可以开发成插件,供多个小程序使用

缺点:

  1. 局限性很强(比如页面大小不能超过1M,不能打开超过5个层级的页面,样式单一,小程序的部分组件已经是成型的了,样式不能修改,比如幻灯片,导航)只能依赖于微信依托与微信,无法开发后台管理功能
  2. 不利于推广,推广面窄,不能分享朋友圈,只能分享给朋友,附近小程序推广,其中附加小程序也收到微信限制
  3. 后台调试麻烦,因为API接口必须https请求,且公网地址,也就是说后台代码必须发布到远程服务器上;当然我们可以修改host进行dns映射把远程服务器转到本地,或者开启tomcat远程调试;不管怎么说终归调试比较麻烦
  4. 前台测试有诸多坑,最头疼莫过于模拟器与真机显示不一致
  5. js引用只能使用绝对路径,不能操作DOM

原生App优点:

  1. 响应速度快
  2. 调用系统硬件的功能(摄像头,拨号,短信蓝牙..)
  3. 在弱网,无网络,离线操作情况下体验好

原生App缺点:

  1. 开发周期长
  2. 开发成本高
  3. 需要下载

十三、常用API

1. 页面跳转:

   - `wx.navigateTo()`:保留当前页面,跳转到应用内的某个页面
   - `wx.redirectTo()`:关闭当前页面,跳转到应用内的某个页面
   - `wx.switchTab()`:跳转到应用内的某个 TabBar 页面,并关闭其他所有非 TabBar 页面
   - `wx.navigateBack()`:关闭当前页面,返回上一页面或多级页面
   - `wx.reLaunch()`:关闭所有页面,打开到应用内的某个页面

2. 网络请求:

   - `wx.request()`:发起网络请求
   - `wx.uploadFile()`:上传文件
   - `wx.downloadFile()`:下载文件
   - `wx.connectSocket()`:创建一个 WebSocket 连接

这些API都是异步操作,需要传入一个 Object 类型的参数,其中包括请求的 URL、请求的参数、请求的方法、请求的头部信息等,如

wx.request({
  url: 'https://www.example.com/api',
  method: 'GET',
  data: {
    key1: value1,
    key2: value2
  },
  header: {
    'content-type': 'application/json' // 默认值
  },
  success(res) {
    console.log(res.data)
  },
  fail(res) {
    console.log('请求失败', res)
  }
})
3. 用户信息:

   - `wx.getUserInfo()`:获取用户信息
   - `wx.login()`:登录
   - `wx.checkSession()`:检查登录态是否过期

4. 设备信息:

   - `wx.getSystemInfo()`:获取系统信息
   - `wx.getNetworkType()`:获取网络类型
   - `wx.getLocation()`:获取地理位置信息

5. 界面交互:

   - `wx.showToast()`:显示消息提示框
   - `wx.showModal()`:显示模态对话框
   - `wx.showLoading()`:显示 loading 提示框
   - `wx.showActionSheet()`:显示操作菜单

6. 媒体文件:

   - `wx.chooseImage()`:从相册选择图片或拍照
   - `wx.previewImage()`:预览图片
   - `wx.saveImageToPhotosAlbum()`:保存图片到系统相册

7. 支付:

   - `wx.requestPayment()`:发起微信支付请求

8. 缓存:

   - `wx.setStorageSync()`:将数据存储在本地缓存中(同步)
   - `wx.getStorageSync()`:从本地缓存中获取数据(同步)

详细的 API 文档可以参考微信小程序官方文档

十四、小程序的发布流程(开发流程)

参考:https://www.cnblogs.com/ssrstm/p/6855572.html

  1. 注册微信小程序账号
  2. 获取微信小程序的AppID
  3. 下载微信小程序开发者工具
  4. 创建demo项目
  5. 去微信公众号配置域名
  6. 手机浏览
  7. 代码上传
  8. 提交审核
  9. 小程序发布

常见问题

  1. bindtap不会阻止事件冒泡,catchatap会阻止,事件不会在父元素上继续传递
  2. rpx:小程序的尺寸单位,规定屏幕为750rpx,可适配不同分辨率屏幕
  3. 本地资源无法通过wxss获取:background-image:可以使用网络图片,或者base64,或者使用标签
  4. wx.navigateTo无法打开页面:一个应用同时只能打开5个页面,请避免多层级的交互方式,或使用wx.redirectTo
  5. tabBar设置不显示:1.tabBar的数量少于2项或超过5项都不会显示。2.tabBar写法错误导致不会显示。3.tabBar没有写pagePath字段(程序启动后显示的第一个页面)

相关推荐

  1. 程序相关

    2024-04-14 06:54:02       32 阅读
  2. 程序】处理蓝牙数据相关函数

    2024-04-14 06:54:02       31 阅读
  3. 程序开发:DOM 相关 API 使用详解

    2024-04-14 06:54:02       24 阅读
  4. 程序

    2024-04-14 06:54:02       68 阅读
  5. 程序

    2024-04-14 06:54:02       44 阅读
  6. 程序

    2024-04-14 06:54:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-14 06:54:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-14 06:54:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-14 06:54:02       82 阅读
  4. Python语言-面向对象

    2024-04-14 06:54:02       91 阅读

热门阅读

  1. KDTree和Octree的区别

    2024-04-14 06:54:02       35 阅读
  2. nuxt.config.js配置

    2024-04-14 06:54:02       35 阅读
  3. React状态与引用(Refs)- 差异和使用场景

    2024-04-14 06:54:02       35 阅读
  4. js实现webp转png/jpg

    2024-04-14 06:54:02       36 阅读
  5. Spring Boot+Vue的高校食材采供管理系统

    2024-04-14 06:54:02       32 阅读
  6. git合并冲突

    2024-04-14 06:54:02       29 阅读
  7. GStreamer插件开发的环境搭建记录

    2024-04-14 06:54:02       33 阅读
  8. 浏览器提示存在不安全脚本如何解决

    2024-04-14 06:54:02       31 阅读
  9. 【C++】模拟list

    2024-04-14 06:54:02       36 阅读
  10. Docker - MongoDB

    2024-04-14 06:54:02       45 阅读
  11. MongoDB聚合运算符:$pow

    2024-04-14 06:54:02       36 阅读