IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 小程序开发学习记录 -> 正文阅读

[移动开发]小程序开发学习记录

1.创建项目

1.1.注册账号,申请appId

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

开发-》开发管理开发设置-》appId

1.2.下载微信开发者工具

稳定版 Stable Build | 微信开放文档

1.3.创建一个小程序

界面 | 微信开放文档

2.项目结构

2.1.小程序开发界面介绍

普通编译:默认加载app.json pages中配置的第一个页面,可以添加编译模式,定义启动的页面

2.2? app

app实例需要一下3个文件:
  • app.json(配置对象):整个项目的入口,{pages:[]}中注册所有的页面
  • app.js(实例)
  • app.wxss(样式)

2.3 pages

每一个页面都需要一下4个文件:
  • xx.wxml:页面布局结构
  • xx:wxss: 页面样式
  • xx.js:要通过page({})创建一个page对象
  • xx.json: 配置对象,每一个页面的xx.json中都需要一个对象
    Page({
      data: {
        name: false,
        counter:1
      },
      onClickPowerInfo(e) {
       this.setData({
            counter:this.data.counter++
        })
     },
    
    });
    ,data: 定义数据,在页面中使用需要mastuch语法,直接修改数据不是响应式的,需要通过this.setData()方法

? ? ? ? ? 函数直接定义,页面中引用不用mastuch语法

一个页面可以有多个组件:

  • 内置组件:
  • 第三方组件:
  • 自定义组件:

3.小程序知识点

3.1 小程序的数据绑定

mustach语法

3.2 配置小程序

常见的配置文件:

1.project.config.json:项目配置文件(项目名称,appId,版本等等)

项目配置文件 | 微信开放文档

2.sitemap.json:小程序搜索相关的

sitemap 配置 | 微信开放文档

3.app.json:全局配置

小程序配置 | 微信开放文档

4.page.json:页面配置?

页面配置 | 微信开放文档


3.3 小程序的双线程模型

3.4 小程序的启动流程

  • 首先加载解析app.json
  • 注册app对象(app.js中执行app()函数)
  • 1.执行app({})中传入的生命周期函数 2.加载自定义组件(默认加载pages中配置的第一个页面)

加载自定义页面时:

  • 先加载xx.json(读取相关配置)
  • 渲染层加载xx.wxml
  • 逻辑层加载xx.js,执行Page()函数,注册页面示例和其中定义的生命周期函数
  • 根据xx.wxml和xx.js 生成js对象(类型虚拟DOM)->真实DOM

3.5 小程序的生命周期函数

App(Object object) | 微信开放文档

3.6 注册app是通常做什么呢?

3.6.1 判断小程序的进入场景

微信开放文档

在onLaunch和onShow生命周期回调函数中,会有options参数,其中有scene值

3.6.2 获取用户信息

1.wx.getUserInfo – 即将废弃的接口;

wx.getUserInfo({
    success:function(res){
      console.log(res)
    }
  })

2.button组件 – 将open-type改成getUserInfo,并且绑定bindgetuserinfo事件去获取;

//WXML
<button size="mini" open-type="getUserInfo" bindgetuserinfo="onGetUserInfo">获取授权</button>

?当用户点击按钮后,调用?onGetUserInfo(event),event.detail.userInfo可以获取用户信息

3.使用open-data组件展示用户信息

<open-data type="userNickName"></open-data>
<open-data type="userAvatarUrl"></open-data>
<open-data type="userCity"></open-data>
<open-data type="userGender"></open-data>
<open-data type="groupName"></open-data>

3.6.3 保存全局变量

在app.js中,通过globalData保存全局变量

在页面中,通过const app = getApp()?获得 App() 函数生成的示例对象

app.global.xx 获取全局对象

?3.7 注册页面

????????进入一个页面时,会加载对应的.json、 .js、 .wxml、 .wxss,当加载.js时会调用Page()方法,也就是注册这个页面,注册当前页面的示例对象。

Page(Object object) | 微信开放文档

注册一个页面时,一般需要做什么呢?

1.在生命周期函数中发送网络请求,从服务器获取数据;

onShow :先执行onShow(),再执行onReady()
onReady页面初次渲染完成时调用,当隐藏再次显示时不会执行
onUnload:当离开该页面时,页面被销毁,执行该回调

2.初始化一些数据,以方便被wxml引用展示

在data中定义数据

3.监听wxml中的事件,绑定对应的事件函数

4.其他一些监听(比如页面滚动、上拉刷新、下拉加载更多等);

3.8 page的生命周期

?当加载一个页面时,渲染线程和逻辑线程同时执行,

渲染线程:inited之后,发现{{}}语法,notify逻辑线程要数据,拿到数据之后就可以渲染页面,当做好渲染准备的时候,给逻辑层发送通知,接受到新数据时,重新渲染,当回到前台接受数据重新渲染

逻辑线程:created()创建出来页面的示例对象执行,onload和onshow,然后waiting notify等待渲染进程的通知,被阻塞,当收到notify时,发送数据,接受渲染层准备完成通知,执行onReady,当数据发生改变,就主动向渲染进程发送数据,当页面隐藏时,执行onHide生命周期,当回到前台,执行onShow生命周期,并且将之前保存的数据重新发送给渲染线程,当推出页面,执行onUnload

3.8 条件判断

条件渲染 | 微信开放文档

wx:if? ?wx:elif? wx:else

<view wx:if="{{score >= 90}}">优秀</view>
<view wx:elif="{{score >= 80 }}">良好</view>
<view wx:elif="{{score >= 60 }}">及格</view>
<view wx:else="{{score < 60}}">不及格</view>
<button size="mini" bindtap="changeScore">修改分数</button>
Page({
  data: {
    score:50
  },
  changeScore(){
      this.setData({
        score:this.data.score+=10
      })
  },

hidden:

  • hidden是所有的组件都默认拥有的属性,
  • 当hidden属性为true时, 组件会被隐藏
  • 当hidden属性为false时, 组件会显示出来
<view hidden="{{hidden}}">哈哈</view>
<button size="mini" bindtap="changeHidden">修改</button>

wx:if hidden 的区别?

  • hidden 控制隐藏和显示是控制是否添加hidden属性 display:none
  • wx:if 是控制组件是否渲染的
wx:if hidden?如何选择?
hidden:如果组件显示与隐藏切换的很频繁
wx:if:如果切换的频率很低

3.9 列表渲染

列表渲染 | 微信开放文档?

3.10 block标签

<block/> 并不是一个组件 ,它仅仅是一个 包装元素 ,不会在页面中做任何渲染,只接受控制属性,比如wx:if,wx:for,不可以写class之类的属性
使用block有 两个好处:
  • 将需要进行遍历或者判断的内容进行包裹,block标签不会渲染,可以提高性能,如果用view进行包裹,会渲染view组件,浪费一定性能。
  • 将遍历和判断的属性放在block便签中,不影响普通属性的阅读,提高代码的可读性。

3.11 template模板

模板 | 微信开放文档

WXML提供模板(template),可以在模板中定义代码片段,在不同的地方调用。(是一种wxml代码的复用机制),template标签中的内容在没有使用时不显示,只有使用时才会显示

name 属性:作为模板的名字, 然后在 <template/> 内定义代码片段

is属性:使用template模板时指定使用哪一个模板

data属性:给模板传递参数

<template name="info">
    <view>{{name}}</view>
    <view>{{age}}</view>
</template>
<template is="info" data="{{name:'张三',age:18}}"></template>
<template is="info" data="{{name:'李四',age:19}}"></template>
<template is="info" data="{{name:'王五',age:20}}"></template>

这种方式只能使用同一个wxml文件中定义的template模板,如果一个模板想要在多个wxml页面中使用,需要对wxml文件进入导入?

3.12 wxml文件的导入

引用 | 微信开放文档

3.12.1 import 导入

<import src='相对路径/绝对路径'></import>

<import src="/wxml/template"></import>
<template is="info" data="{{name:'张三',age:18}}"></template>
<template is="info" data="{{name:'李四',age:19}}"></template>
<template is="info" data="{{name:'王五',age:20}}"></template>

注意:import导入wxml文件不可以循环导入,即导入的template中还导入其他template模板

?3.12.2 include 导入

????????include 可以将目标文件中 除了 <template/> <wxs/> 外 的整个代码引入,不能导入模板,相当于是拷贝到 include 位置,用于多个页面共享的代码片段进行抽取,再在各个页面进行导入,可以递归导入

3.13 WXS

WXS 语法参考 | 微信开放文档

是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。
官方:WXS 与 JavaScript 是不同的语言,有自己的语法,并不和 JavaScript 一致。(不过基本一致)
为什么要设计WXS语言呢?
  • 在WXML中是不能直接调用Page/Component中定义的函数的,插值表达式中不可以直接调用函数,要通过bindtap=“xx”去绑定函数
  • 但是某些情况, 我们可以希望使用函数来处理WXML中的数据(类似于Vue中的过滤器),这个时候就使用WXS了
WXS使用的限制和特点:
  • WXS 的运行环境和其他 JavaScript 代码是隔离的,WXS 中不能调用其他 JavaScript 文件中定义的函数,也 不能调用小程序提供的API。
  • WXS 函数不能作为组件的事件回调。
  • 由于运行环境的差异,在 iOS 设备上小程序内的 WXS 会比 JavaScript 代码快 2 ~ 20 倍。在 android 设备上二者运行效率无差异。

WXS有两种写法:

  • 写在<wxs>标签中
<wxs module="price">
var reserve = function(v){
    return v.toFixed(2)
}
module.exports = {
    reserve:reserve
}
</wxs>
<view>{{price.reserve(1.999999)}}</view>
  • 写在以.wxs结尾的文件中
// /wxs/price.wxs
var reserve = function(v){
    return v.toFixed(3)
}
module.exports = {
    reserve:reserve
}
// /view/index.wxml
<wxs src="/wxs/price.wxs" module="price"></wxs>
<view>{{price.reserve(1.999999)}}</view>

3.14? 事件

事件 | 微信开放文档

老师讲课方式:

一个知识点一个tag

  • 创建一个tag:git tag 知识点1
  • 回退到初始状态:git reset
  • 把tag推送到远端: git push --tags
  • 切换tag:git checkout 知识点
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:40:22  更:2022-09-21 00:42:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 5:34:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码