【微信小程序开发】基础语法篇

news2024/11/24 2:48:29

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于小程序的相关操作吧

 

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.视图层

1.数据绑定

wxml

js

2 .列表渲染

wx:for

wxml

js

3.条件渲染

wx:if

wxml

js

4.模板

wxml

js

事件的绑定

二.逻辑层(生命周期)

1.页面路由

①页面栈

②路由方式

③注意事项

2.生命周期

①一级跳一级

A.WXML

A.JS

B.WXML

B.JS

②二级跳二级

​编辑

aa.WXML

aa.JS

bb.WXML

bb.JS

③一级跳二级

④二级跳一级

⑤深层次页面直接跳一级

wh.WXML

wh.JS

⑥返回上一次所打开的页面

3.结论


上期我们简单的了解了小程序,并且成功安装了微信开发工具,那么这一期我们就来讲讲它的相关语法知识吧!!

一.视图层

1.数据绑定

wxml

<view> {{message}} </view>

js

 /**
   * 页面的初始数据
   */
  data: {
    message: 'Hello 辉辉!'
  },

2 .列表渲染

wx:for

wxml
<view wx:for="{{huihui}}"> {{item.name}} </view>
js
/**
   * 页面的初始数据
   */
  data: {
    huihui: [{name:'辉辉1'},{name:'辉辉2'}]
  },

3.条件渲染

wx:if

wxml
<view wx:for="{{huihui}}"> {{item.name}} </view>
<view wx:if="{{view == '1'}}"> 王辉 </view>
<view wx:elif="{{view == '2'}}"> 光军 </view>
<view wx:else="{{view == '3'}}"> 辉辉 </view>
js
/**
   * 页面的初始数据
   */
  data: {
    view: '3'
  },

4.模板

wxml
<template name="staffName">
  <view>
    FirstName: {{firstName}}, LastName: {{lastName}},AllName:{{firstName}}{{lastName}}
  </view>
</template>

<template is="staffName" data="{{...staffA}}"></template>
<template is="staffName" data="{{...staffB}}"></template>
<template is="staffName" data="{{...staffC}}"></template>
js
 /**
   * 页面的初始数据
   */
  data: {
    staffA: {firstName: '王', lastName: '辉'},
    staffB: {firstName: '夏', lastName: '威'},
    staffC: {firstName: '辉', lastName: '辉'}
  },

事件的绑定

小程序中绑定事件通过bind关键字来实现。如:bindtap、bindinput、bindchange等

不同的组件支持不同的事件,具体看组件的说明即可

注意

🔺绑定事件是不能带参数 不能带括号 以下为错误写法

<input bindinput="handleInput(100)" />

🔺事件传值 通过标签自定义属性的方式和value

<input bindinput="handleInput" data-item="100" />

🔺事件触发时获取数据

 handleInput: function(e) {
    // {item:100}
   console.log(e.currentTarget.dataset)
    // 输入框的值
   console.log(e.detail.value);
 }

二.逻辑层(生命周期)

1.页面路由

在小程序中所有页面的路由全部由框架进行管理。

①页面栈

框架以栈的形式维护了当前的所有页面。 当发生路由切换的时候,页面栈的表现如下:

路由方式页面栈表现
初始化新页面入栈
打开新页面新页面入栈
页面重定向当前页面出栈,新页面入栈
页面返回页面不断出栈,直到目标返回页
Tab 切换页面全部出栈,只留下新的 Tab 页面
重加载页面全部出栈,只留下新的页面

开发者可以使用 getCurrentPages() 函数获取当前页面栈。

②路由方式

对于路由的触发方式以及页面生命周期函数如下:

路由方式触发时机路由前页面路由后页面
初始化小程序打开的第一个页面onLoad, onShow
打开新页面调用 API wx.navigateTo
使用组件 <navigator open-type="navigateTo"/>
onHideonLoad, onShow
页面重定向调用 API wx.redirectTo
使用组件 <navigator open-type="redirectTo"/>
onUnloadonLoad, onShow
页面返回调用 API wx.navigateBack
使用组件<navigator open-type="navigateBack">
用户按左上角返回按钮
onUnloadonShow
Tab 切换调用 API wx.switchTab
使用组件 <navigator open-type="switchTab"/>
用户切换 Tab
各种情况请参考下表
重启动调用 API wx.reLaunch
使用组件 <navigator open-type="reLaunch"/>
onUnloadonLoad, onShow

Tab 切换对应的生命周期(以 A、B 页面为 Tabbar 页面,C 是从 A 页面打开的页面,D 页面是从 C 页面打开的页面为例):

当前页面路由后页面触发的生命周期(按顺序)
AANothing happend
ABA.onHide(), B.onLoad(), B.onShow()
AB(再次打开)A.onHide(), B.onShow()
CAC.onUnload(), A.onShow()
CBC.onUnload(), B.onLoad(), B.onShow()
DBD.onUnload(), C.onUnload(), B.onLoad(), B.onShow()
D(从转发进入)AD.onUnload(), A.onLoad(), A.onShow()
D(从转发进入)BD.onUnload(), B.onLoad(), B.onShow()

③注意事项

  • navigateToredirectTo 只能打开非 tabBar 页面。
  • switchTab 只能打开 tabBar 页面。
  • reLaunch 可以打开任意页面。
  • 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
  • 调用页面路由带的参数可以在目标页面的onLoad中获取。

2.生命周期

小程序的生命周期分为应用生命周期页面生命周期以及组件的生命周期

这一篇我们主要讲一下页面生命周期【下面这个图片是官方提供的】

首先准备四个页面,其中一级A和一级B是一级菜单,二级a和二级b是二级菜单,更深层的页面是wh页面,并且要在这些页面中添加按钮,然后设置对应的点击事件navigateToredirectTo 只能打开非 tabBar 页面和switchTab 只能打开 tabBar 页面的原则】

①一级跳一级

A.WXML
<!--pages/A/A.wxml-->
 
<text>我是一级A</text>
<button bindtap="AtoB">一级A页面跳转一级B页面</button>
<button bindtap="Atoaa">一级A页面跳转二级aa页面</button>
 

 
A.JS
// pages/A/A.js
Page({
  
  /**
   * 页面的初始数据
   */
  data: {
    
  },
  AtoB:function(){
    wx.switchTab ({
      url:"/pages/B/B",
    })
  },
  Atoaa:function(){
    wx.navigateTo({
      url:"/pages/aa/aa",
    })
  },
 /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('一级A--onLoad')
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    console.log('一级A--onReady')
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    console.log('一级A--onShow')
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    console.log('一级A--onHide')
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    console.log('一级A--onUnload')
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})
B.WXML
<!--pages/B/B.wxml-->
<text>我是一级B</text>
B.JS
// pages/B/B.js
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },

 /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('一级B--onLoad')
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    console.log('一级B--onReady')
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    console.log('一级B--onShow')
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    console.log('一级B--onHide')
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    console.log('一级B--onUnload')
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

②二级跳二级

aa.WXML
<!--pages/aa/aa.wxml-->
<text>我是二级aa</text>
<button bindtap="aatobb">二级aa页面跳转二级bb页面</button>
<button bindtap="aatoA">二级aa页面跳转一级A页面</button>
aa.JS
// pages/aa/aa.js
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },
  aatoA :function(){
    wx.switchTab ({
      url:"/pages/A/A",
      
    })
  },
  aatobb:function(){
    wx.navigateTo({
      url:"/pages/bb/bb",
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('二级aa--onLoad')
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    console.log('二级aa--onReady')
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    console.log('二级aa--onShow')
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    console.log('二级aa--onHide')
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    console.log('二级aa--onUnload')
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})
bb.WXML
<!--pages/bb/bb.wxml-->
<text>我是二级bb</text>
<button bindtap="bbtowh">二级bb页面打开更深的wh页面</button>
bb.JS
// pages/bb/bb.js
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },
  bbtowh:function(){
    wx.navigateTo({
      url:"/pages/wh/wh",
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('二级bb--onLoad')
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    console.log('二级bb--onReady')
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    console.log('二级bb--onShow')
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    console.log('二级bb--onHide')
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    console.log('二级bb--onUnload')
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

③一级跳二级

代码在上面的①②中

④二级跳一级

代码在上面的①②中

⑤深层次页面直接跳一级

wh.WXML
<!--pages/wh/wh.wxml-->
<text>pages/wh/wh.wxml</text>
<view> {{message}} </view>
<view wx:for="{{huihui}}"> {{item.name}} </view>
<view wx:if="{{view == '1'}}"> 王辉 </view>
<view wx:elif="{{view == '2'}}"> 光军 </view>
<view wx:else="{{view == '3'}}"> 辉辉 </view>
<template name="staffName">
  <view>
    FirstName: {{firstName}}, LastName: {{lastName}},AllName:{{firstName}}{{lastName}}
  </view>
</template>

<template is="staffName" data="{{...staffA}}"></template>
<template is="staffName" data="{{...staffB}}"></template>
<template is="staffName" data="{{...staffC}}"></template>

<button bindtap="whtoA">wh页面直接到一级A</button>
wh.JS
// pages/wh/wh.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    message: 'Hello 辉辉!',
    huihui: [{name:'辉辉1'},{name:'辉辉2'}],
    view: '3',
    staffA: {firstName: '王', lastName: '辉'},
    staffB: {firstName: '夏', lastName: '威'},
    staffC: {firstName: '辉', lastName: '辉'}
  },
  whtoA :function(){
    wx.switchTab ({
      url:"/pages/A/A",
      
    })
  },
   /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('深层次页面wh--onLoad')
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    console.log('深层次页面wh--onReady')
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    console.log('深层次页面wh--onShow')
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    console.log('深层次页面wh--onHide')
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    console.log('深层次页面wh--onUnload')
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

⑥返回上一次所打开的页面

3.结论

▲一级菜单不会被销毁只会隐藏

▲深二级菜单跳浅二级菜单深的会销毁(d->c,d会被销毁)

▲浅二级菜单跳深二级菜单只会被隐藏(c->d,c会隐藏)

▲隔代跳级中间的所有页面会被销毁

好啦,今天的分享就到这了,希望能够帮到你呢!😊😊 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1098130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android CountDownTimer倒计时随时随地开启或关闭

前言 业务上有个需求&#xff0c;在心跳被触发时需要记录一个时间 当心跳断开后120s需要断开连接 如果收到心跳包就重置这个定时器的时间 代码实现 private CountDownTimer mTimer; private boolean mIsTimerRunning false;if (!mIsTimerRunning) {// 启动定时器startTimer…

消息队列学习分享

消息队列学习 消息队列来解决问题 &#xff08;1&#xff09;异步处理 消息通知、日志管理、更新统计数据等步骤 &#xff08;2&#xff09;流量控制 如何避免过多的请求压垮我们的系统&#xff1f; 比如一个秒杀系统&#xff0c;网关在收到请求后&#xff0c;将请求放入…

基于Pytest+Requests+Allure实现接口自动化测试

一、整体结构 框架组成&#xff1a;pytestrequestsallure设计模式&#xff1a; 关键字驱动项目结构&#xff1a; 工具层&#xff1a;api_keyword/参数层&#xff1a;params/用例层&#xff1a;case/数据驱动&#xff1a;data_driver/数据层&#xff1a;data/逻辑层&#xff1a…

数字化时代,数据仓库究竟是干什么的?

无论你是否专门从事大数据开发&#xff0c;作为一个开发人员&#xff0c;应该都听说过数据仓库的概念&#xff0c;那你知道为什么会出现数据仓库&#xff1f;数据仓库究竟是干嘛的吗&#xff1f;有什么价值和意义呢&#xff1f;那么本文就带到入门&#xff0c;揭开数据仓库的面…

嵌入式软硬分工与职业发展

嵌入式软硬分工与职业发展&#xff1a; 嵌入式系统分为软件和硬件两个方向。大公司通常明确员工从事嵌入式软件或硬件工作&#xff0c;分工合理利用经验解决问题。小公司可能综合工作&#xff0c;但长期不利深入学习和发展&#xff0c;对个人竞争力不利。嵌入式软件一般指底层…

财报解读:百事业绩继续超预期,无糖布局将带来新爆发?

7月份以来&#xff0c;美国市场通胀“二次反弹”&#xff0c;叠加新型减肥药在北美市场持续风靡&#xff0c;外界普遍预期食品饮料品类的消费将受到冲击。 然而&#xff0c;在此环境下&#xff0c;行业巨头百事仍然交出了一份全面超预期的三季报&#xff0c;并且还有力回应了新…

node 通过axios发送post请求(FormData)

方案一&#xff1a; const axios require(axios) const FormData require(form-data) const fs require(fs)const sdUpscaleOnAzure async (req, res) > {const data new FormData()data.append(image, fs.readFileSync(/temp/ai/sd/download/1.png))let config {hea…

动态规划:10 0-1背包理论基础II(滚动数组)

动态规划&#xff1a;10 0-1背包理论基础II&#xff08;滚动数组&#xff09; 接下来还是用如下这个例子来进行讲解 背包最大重量为4。 物品为&#xff1a; 重量价值物品0115物品1320物品2430 问背包能背的物品最大价值是多少&#xff1f; 一维dp数组&#xff08;滚动数组…

redis作为消息队列的缺点

Redis作为消息队列的不足。 1、基于内存 Redis是一种基于内存的数据库产品&#xff0c;这意味着数据存储在内存中&#xff0c;当内存不足时&#xff0c;Redis会使用基于磁盘的虚拟内存来存储数据。虽然这种虚拟内存机制可以增加Redis的存储容量&#xff0c;但也会降低Redis的…

19.项目开发之量化交易QuantTrade(一)

项目开发之量化交易QuantTrade 数据库创建&项目创建 SpringBoot项目之量化交易QuantTrade创建 创建项目之初&#xff0c;将需要的pom一次性导入 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.…

福建建筑模板厂家-能强优品木业

福建建筑模板厂家-能强优品木业&#xff0c;是一家专业从事建筑模板生产销售25年的源头工厂。我们以优质的产品和卓越的服务赢得了福建当地建筑施工企业的信赖与合作。作为一家有着丰富经验的建筑模板厂家&#xff0c;我们致力于提供高品质的产品&#xff0c;以满足客户的需求。…

一文2000字手把手教你写一份优质的性能测试报告的编写

性能测试项目实战&#xff08;风暴平台&#xff09; 1、背景 公司之前的测试团队做API的⾃动化测试都是使⽤JMeter等工具来进行&#xff0c;这样的话测试效率⽽⾔不是那么很⾼&#xff0c;⽽ 且在扩展性⽅⾯不是很有竞争⼒的。所以开发了新的测试平台&#xff0c;但是考虑到公…

只要看完这6个案例,就会刷新你对室内空间颜色搭配的认知

只要看完这6个案例&#xff0c;就会刷新你对室内空间颜色搭配的认知&#xff01; 室内设计和家居装饰灵感因 "芭比娃娃 "电影的上映而席卷了 A&D 行业。随着多年来粉红色的复苏&#xff0c;专家们采用大胆的粉红色调和女性化的装饰也就不足为奇了&#xff0c;而这…

不同阶段uncertainty如何设置

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; PreCTS stage: Setup uncertainty jitter skew margin Hold uncertainty skew margin PostCTS stage: Setup uncertainty jitter margin Hold uncertainty margin jitter指的是pll时钟抖动…

每个开发人员都想使用的编程语言

在任何时候&#xff0c;一些编程语言都会把大量的开发人员变成热情的布道者&#xff0c;试图说服世界其他地方的人相信它的伟大。 当热起来的时候&#xff0c;这种语言可能会成为行业标准&#xff0c;但其他时候&#xff0c;这种受欢迎程度就会消失。 在这个故事中&#xff0…

【重要!合规政策更新】欧盟,儿童玩具相关产品卖家请及时关注!儿童玩具EN71

合规政策更新&#xff01; 尊敬的卖家&#xff1a; 您好&#xff01; 我们此次联系您是因为您正在销售需要审批流程的商品。为此&#xff0c;亚马逊正在实施审批流程&#xff0c;以确认我们网站上提供的商品类型须符合指定的认证标准。要在亚马逊商城销售这些商品&#xff0…

华为OD七日集训第8期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、7日集训第8期五、精心挑选21道高频100分经典题目&#xff0c;作为入门。第1天、数据结构第2天、滑动窗口第3天、贪心算法第4天、二分查找第5天、分治递归第6天、深度优先搜索dfs算法第7天、宽度优选算法&#xff0c;回溯法 六…

小程序框架语法详解以及页面生命周期的代码预演

目录 一、框架简介 二、视图层 2.1 简介 2.2 WXML语法演示 2.2.1 数据绑定 2.2.2 列表渲染 2.2.3 条件渲染 2.2.4 模板 2.3 事件系统 2.4 页面一级菜单展示及切换 2.5 a页面跳b页面界面内部按钮演示 2.6 a页面跳c页面&#xff08;不在一级菜单内的页面&#xff09;…

基于SpringBoot的在线小说阅读平台系统

基于SpringBoot的在线小说阅读平台系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 个人中心 登录界面 管理员界面 摘要 基于Spring Boot的在线小说阅读…

【M1-Java】讲讲 StringBuffer和StringBuilder区别

StringBuffer和StringBuilder区别 开头&#xff1a;首先&#xff0c;StringBuffer和StringBuilder都是用于存储或者修改拼接字符串的&#xff0c;与String类似。 来源:都继承AbstractStringBuilder类。初始容量为16的字符串缓冲区。 字符修改上的区别: ①和 String 类不同的…