微信小程序-2

news2024/12/23 10:47:43

微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/

一、app.js中的生命周期函数与globalData(全局变量)

指南 - - - 小程序框架 - - - 注册小程序

删除app.js里的东西,输入App回车,调用生命周期

选项 - - - 重新打开此项目

当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
当小程序启动,或从后台进入前台显示,会触发 onShow
当小程序从前台进入后台,会触发 onHide
当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息

  onLaunch: function () {
    console.log('hi')
  },

  // globalData 自己添加
  globalData:{
    name:'weixin'
  }

在js文件里调用

// 调用app.js里的内容
const app = getApp()
console.log(app);
// 得到name的值weixin
console.log(app.globalData.name)

得到数据如下图
在这里插入图片描述

在app.js里this可以拿到app对象,在onLaunch里可以修改name值

  onLaunch: function () {
    this.globalData.name='微信'
  },

二、page页内的onload和data差值表达式

指南 - - - 小程序框架 - - - 注册页面

删除js文件里的所有内容,输入Page点击前面有方块的那个
在这里插入图片描述

小程序执行先走onLaunch再走onLoad,app.js文件优先级大于其他js文件

js文件

  data: {
    name:'zhangsan',
  },

wxml文件

{{name}}

zhangsan会被渲染到页面

在onLoad里使用this.setData修改data的数据

  onLoad: function (options) {
    this.setData({
      name:'lisi'
    })
  },

页面中的zhangsan两秒后变为lisi
setTimeout定时器

  onLoad: function (options) {
    // 设置两秒钟后再进行修改
    // 使用箭头函数,否则会出现指向问题
    setTimeout(()=>{
      this.setData({
        name:'lisi'
      })
    },2000)
  },

三、data中不同数据类型及渲染

指南 - - - 小程序框架 - - - wxml

  data: {
    name:'张三',
    age:18,
    bool:true,
    number:['一','二','三'],
    user:{
      name:'李四',
      gender:'男',
      age:20
    },
    ls:[{id:1,title:'one',year:2019},{id:2,title:'two',year:2020},{id:3,title:'three',year:2021}]
  },
{{name}} {{age}} {{bool}}
<view>{{number}}</view>
<view>{{user}}</view>
<view>{{user.name}}</view>
<view>{{user.name +'-'+ user.gender +'-'+ user.age}}</view>

在这里插入图片描述

1.条件渲染 if

条件写到{{}}里
前面加 ! 取反 - - - eg:{{!bool}} data里的bool是true,取反后变为false

注意:if elif else 要放在一起,中间不能有其他内容,否则会报错

<view wx:if="{{number == '一'}}"></view>
<view wx:elif="{{number == '一'}}"></view>
<view wx:else"></view>
<!-- <view wx:else="{{number == '一'}}"> 三 </view> -->

最后显示为三,因为number是列表[‘一’,‘二’,‘三’],都错,所以显示else里的值

2.列表渲染 for

<view wx:for="{{number}}">
  {{item}}
</view>

在wxml里得到了三个包裹着view的文字
在这里插入图片描述

wx:for-item 元素
wx:for-index 元素索引

<view wx:for="{{number}}" wx:for-item='num'>
  {{index+1}} - {{num}}
</view>
<!-- {{index+1}} - {{num}}  中间有空格,所有输出的-左右都有空格 -->
<view wx:for="{{number}}" wx:for-item='num' wx:for-index='idx'>
  {{idx+1}} - {{num}}
</view>

都得到下面内容

1 - 一
2 - 二
3 - 三

调试器有报错,但不影响 可以使用wx:key=‘idx’解决

<view wx:for="{{ls}}" wx:key="id">
  <view>{{item.title}} {{item.year}}</view>
</view>

在这里插入图片描述

四、bindtap事件绑定触发

指南 - - - 小程序框架 - - - 事件系统 介绍

绑定事件
bind:tap | bindtap

data-自己定义的参数

<view class="box" data-myname='张三' bindtap='onClick' style="width: 200rpx;height: 200rpx;background: aqua;"></view>
<view class="name">姓名:{{name}}</view>

函数onClick和onLoad平级,写在onLoad之后,函数写完后记得写逗号

  data: {
    name:''
  },
  
  onClick(){
    this.setData({
      name:'李四'
    })
  },

点击蓝色方块,名字出现
在这里插入图片描述


<view class="box" data-myname='李四' bindtap='onClick' style="width: 200rpx;height: 200rpx;background: aqua;"></view>
<view class="name">姓名:{{name}}</view>
  data: {
    name:'张三'
  },

  // event是接受参数的
  onClick(event){
    // console.log(event.currentTarget.dataset);
    // let obj = event.currentTarget.dataset;
    // console.log(obj);
    // 使用花括号可以直接拿到值
    let {myname}= event.currentTarget.dataset;
    // console.log(myname)
    this.setData({
      name:myname
    })
  },

使用console.log(event);查看参数
我们定义的参数在currentTarget的dataset里
使用console.log(event.currentTarget.dataset);可以在console里查看自己定义的参数
在这里插入图片描述
点击蓝色方块,张三会变成李四
在这里插入图片描述

小案例

点击方块,改变方块的大小和颜色

<view bindtap='clickBox' style="width: {{size}}rpx;height: {{size}}rpx;background: {{color}};color:red;display:flex;justify-content: center;align-items: center;">
随机数:{{number}}
</view>
  data: {
    color:'pink',
    size:300,
  },

  clickBox(){
    let rdm = parseInt(Math.random()*100);
    // console.log(rdm)
    // let color = 'rgb(100,200,100)';
    let r = parseInt(Math.random()*255);
    let g = parseInt(Math.random()*255);
    let b = parseInt(Math.random()*255);
    // 注意:此处的`是和~一个键
    // ${}
    let color = `rgb(${r},${g},${b})`;
    let size = parseInt(Math.random()*600);
    // 如果size的值小于200,size=200,如果大于用size本身的大小
    size = size<200?200:size
    this.setData({
      number:rdm,
      // 两个值一样可以省略
      color:color,
      size,
    })
  },

Math.random()取的是0到1之间的小数
parseInt()取整
在这里插入图片描述

五、表单组件

1.button

<button>按钮</button>
<button size="mini" type="primary">按钮</button>
<button size="mini" type="warn">按钮</button>
<button size="default" type="default">按钮</button>
<!-- true和false必须写在{{}}里才会生效 -->
<!-- plain是否镂空,背景色透明 -->
<button size="default" type="default" plain="{{true}}">按钮</button>

在这里插入图片描述

2.input textarea

input 单行输入框
textarea 多行输入框

value初始值
placeholder输入框为空时占位符

<input type="text" bindinput="onInput" value="请输入..." placeholder="请输入用户名" placeholder-style="color:red" style="background: aqua;"/>
<view>{{content}}</view>
  onInput(e){
    // console.log(e);
    let value = e.detail.value;
    this.setData({
      content:value
    })
  },

效果如下:
在这里插入图片描述

在这里插入图片描述
value.length
value值为空时,value.length为false,!取反,!value.length为true
disable为true是进制使用该按钮

<button type="primary" disabled="{{!value.length}}">按钮</button>

输入框聚焦时触发 bindfocus=“onFocus”

<input type="text" bindfocus="onFocus" bindinput="onInput" value="" placeholder="请输入用户名" placeholder-style="color:red" style="background: aqua;"/>
<view>{{content}}</view>
<button type="primary" disabled="{{true}}" >按钮</button>
  onFocus(e){
    console.log(e);
  },

在这里插入图片描述

在这里插入图片描述

3.checkbox checkbox-group label

box-sizing:border-box; 内填充
width= calc(100% - 40rpx);

<checkbox-group bindchange="clickChange">
  <view style="margin: 20rpx;">
    <label for="">
      <!-- checked默认选中项 -->
      <checkbox checked value="basketball"/>
      <text>篮球</text>
    </label>    
  </view>
  <view style="margin: 20rpx;">
    <label for="">
      <!-- color选中时对钩的颜色 -->
      <checkbox color="red" value="football"/>
      <text>足球</text>
    </label>    
  </view>
</checkbox-group>

在这里插入图片描述
使用label时,点击文字也可以触发选中状态

六、综合案例

指南 - - - 小程序框架 - - - 简易双向绑定

block专门做样式的布局

在这里插入图片描述

<view class="title">经典语录</view>
<view class="out">
  <block wx:if="{{listArr.length}}">
    <view class="list">
      <view class="row" wx:for="{{listArr}}" wx:key="id">
        <view class="text">{{index + 1}}.{{item.title}}</view>
        <view class="close" bindtap='clickClose' data-index="{{index}}">
          <icon type="clear" size="26"/>
        </view>
      </view>
    </view>
    <view class="count">共{{listArr.length}}条语录</view>
  </block>
  <view wx:else style="text-align: center;font-size: 30rpx;padding: 20rpx 0;color:#555;">暂无语录,请添加</view>
  <view class="comment">
    <!-- model双向绑定 -->
    <!-- bindconfirm 点击完成按钮时触发,event.detail = { value } -->
    <!-- 此处敲回车可将内容发布上去 -->
    <input bindconfirm="onSubmit" model:value="{{iptValue}}" type="text" placeholder="请输入文字..." placeholder-style="color:#aaa;font-size:28rpx"/>
    <button bindtap="onSubmit" size="mini" type="primary" disabled="{{!iptValue.length}}">发布</button>
  </view>
</view>
<!-- 在输入框输入内容,下面的内容可以跟着改变 -->
{{iptValue}}
.title{
  font-size: 50rpx;
  text-align: center;
  color: #3c3c3c;
  padding: 60rpx 0 30rpx;
}
.out{
  width: 690rpx;
  margin: 30rpx;
  box-shadow: 0 15rpx 40rpx rgba(0,0,0,0.1);
  border-radius: 10rpx;
  padding: 30rpx;
  box-sizing: border-box;
}
.out .list .row{
  padding: 15rpx 0;
  border-bottom: 1rpx solid #e8e8e8;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 34rpx;
  color:#333;
}
.out .list .row .text{
  padding-right: 10rpx;
  box-sizing: border-box;
}
.out .count{
  padding: 20rpx 0;
  text-align: center;
  font-size: 30rpx;
  color: #888;
}
.out .comment{
  display: flex;
  margin-top: 20rpx;
}
.out .comment input{
  flex: 4;
  background: #f4f4f4;
  margin-right: 10rpx;
  height: 100%;
  height: 64rpx;
  border-radius: 10rpx;
  color: #333;
  padding:0 20rpx;
}
.out .comment button{
  flex:1;
}
Page({

  /**
   * 页面的初始数据
   */
  data: {
    iptValue:'',
    listArr:[
      {id:123123123,title:'啊啊啊啊啊啊啊啊啊'},
      {id:456456456,title:'哈哈哈哈哈哈哈哈哈'},
      {id:789789789,title:'红红火火恍恍惚惚'},
    ]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    
  },
  // 点击按钮发布
  onSubmit(){
    // console.log(this.data.iptValue);
    let value = this.data.iptValue;
    let arr = this.data.listArr;
    // Appends new elements to an array, and returns the new length of the array.
    // 数组添加内容
    arr.push({
      // id 时间戳
      id:Date.now(),
      title:value,
    })
    this.setData({
      listArr:arr,
      iptValue:'',
    })
  },
  // 点击删除该行内容
  clickClose(e){
    // console.log(e)
    // e.currentTarget.dataset.index  // 得到该行的索引
    let {index} = e.currentTarget.dataset;
    let arr = this.data.listArr;
    // splice删除 Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.
    arr.splice(index,1);
    // console.log(arr);
    this.setData({
      listArr:arr,
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    
  },

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

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

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

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

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

相关文章

【0225】RELSEG_SIZE、BLCKSZ 等变量值是多少?它们声明于何处?

1. RELSEG_SIZE、BLCKSZ等变量值 在讲解SMGR实现原理时,在md.c源文件中,经常会看到 BLCKSZ、RELSEG_SIZE等变量的出现,但是整个PG内核源码中又搜索不到此变量的定义处。如下: 那么有两个疑问: 为何源码中搜索不到此类变量的声明?它们的值又是多少?如果不知道这两个变量…

王杰C++day1

#include <iostream>using namespace std;int main() {cout << "输入一个字符串&#xff1a;" << endl;string str;int a 0,b 0,c 0,d 0,e 0;getline(cin,str);for(int i 0;i < (int)str.size();i){if(str[i] > A && str[i] &…

CTF 全讲解:[SWPUCTF 2021 新生赛]Do_you_know_http

文章目录 参考环境题目hello.php雾现User-Agent伪造 User-AgentHackBarHackBar 插件的获取修改请求头信息 雾散 a.php雾现本地回环地址与客户端 IP 相关的 HTTP 请求头X-Forwarded-For 雾散 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火认知大模型…

蓄电池与超级电容混合储能并网逆变系统Simulink仿真

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

微信小程序开发——自定义堆叠图

先看效果图 点击第一张图片实现折叠&#xff0c;再次点击实现展开 思路 图片容器绑定点击事件获取当前图片索引&#xff0c;触发onTap函数&#xff0c;根据索引判断当前点击的图片是否为第一张&#xff0c;并根据当前的折叠状态来更新每张图片的位置&#xff0c;注意图片向上…

android插件开发

写文件&#xff1a;二进制&#xff1a; 项目步骤&#xff1a;下载图片&#xff0c;转码。测试显示。 测试加的代码 写文件&#xff0c;二进制&#xff0c;Base64解码&#xff1a;

基于复旦微JFM7K325T FPGA的高性能PCIe总线数据预处理载板(100%国产化)

PCIE711是一款基于PCIE总线架构的高性能数据预处理FMC载板&#xff0c;板卡采用复旦微的JFM7K325T FPGA作为实时处理器&#xff0c;实现各个接口之间的互联。该板卡可以实现100%国产化。 板卡具有1个FMC&#xff08;HPC&#xff09;接口&#xff0c;1路PCIe x8主机接口&#x…

2023.10.07

#include <iostream>using namespace std;int main() {string str;cout << "请输入字符串&#xff1a;";getline(cin,str);int big0,little0,spac0,num0,sym0;int sizestr.size();for(int i0;i<size;i){if((int)str.at(i)<6526 && (int)st…

可怕,鸡的这些部位千万不能吃?多数人都不知道……

鸡肉深受大多数人的喜爱&#xff0c;但网上关于鸡肉的说法也是各式各样&#xff1a; 有人说“鸡头当中含有重金属物质&#xff0c;食用有危害”&#xff1b;有人说“鸡皮不能吃&#xff0c;不然会中毒”&#xff1b;甚至还有人说“鸡肉不能吃&#xff0c;否则会致癌”…… 网传…

VMware 虚拟机删除+重建

由于本人暴力地关闭虚拟机&#xff0c;导致虚拟机出现了一些问题&#xff0c;并且还没有给虚拟机拍快照&#xff0c;虽然还能用&#xff0c;但本人不想将就&#xff0c;于是乎打算重新新建一个虚拟机 一、删除 1.打开workstation,选择虚拟机&#xff0c;右键选择移除。 虽然虚…

x64内核实验7-线程

x64内核实验7-线程 TOC 线程是比较重要的内核结构&#xff0c;思考一下其实可以想到线程结构体在64位下的变化应该不会很大最多只是扩充了一些内容&#xff0c;因为从我们之前分析段页时候会发现cpu更新的这些内容大部分不影响xp时候的线程切换机制&#xff0c;下面我们来验证…

无法打开软件,因为计算机中找不到MSVCP140.dll的解决方法

msvcp140.dll是Microsoft Visual C 2015 Redistributable的一个动态链接库文件&#xff0c;它是Microsoft Visual Studio 2015的一部分。这个文件包含了许多用于运行C程序所需的运行时函数和数据。当计算机上安装了Visual Studio 2015或更高版本时&#xff0c;msvcp140.dll文件…

嵌入式Linux裸机开发(四)IMX6U主频和时钟配置

系列文章目录 文章目录 系列文章目录介绍时钟来源PLL时钟源内核时钟PFD时钟AHB、 IPG 和 PERCLK 根时钟设置 结语 介绍 默认配置下 I.MX6U 工作频率为 396MHz&#xff0c;但该系列标准工作频率事528MHz&#xff0c;有些型号甚至可以工作到696MHz。 默认情况下内部 boot rom 会…

阿里云服务器ECS经济型e实例租用价格表

阿里云服务器e系列优惠价格&#xff1a;2核2G配置182元一年、2核4G配置365元一年、2核8G配置522元一年&#xff0c;e系列即ECS经济型e实例&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;系统盘支持ESSD Entry云盘&#xff08;推荐&#xff09;、ESSD云盘、ES…

【SpringBoot】| Thymeleaf 模板引擎

目录 Thymeleaf 模板引擎 1. 第一个例子 2. 表达式 ①标准变量表达式 ②选择变量表达式&#xff08;星号变量表达式&#xff09; ③链接表达式&#xff08;URL表达式&#xff09; 3. Thymeleaf的属性 ①th:action ②th:method ③th:href ④th:src ⑤th:text ⑥th:…

【yolo系列:yolov7改进wise-iou】

yolo系列文章目录 学习视频&#xff1a; YOLOV7改进-Wise IoU_哔哩哔哩_bilibili 代码地址&#xff1a; objectdetection_script/yolov7-iou.py at master z1069614715/objectdetection_script (github.com) 文章目录 yolo系列文章目录一、在yolov7之上进行替换二、在loss.p…

双馈风力发电机-900V直流混合储能并网系统Simulink仿真

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C++默认参数(实参)

在本文中&#xff0c;您将学习什么是默认参数&#xff0c;如何使用它们以及使用它的必要声明。在C 编程中&#xff0c;您可以提供函数参数的默认值。默认参数背后的想法很简单。如果通过传递参数调用函数&#xff0c;则这些参数将由函数使用。但是&#xff0c;如果在调用函数时…

几道web题目

总结几道国庆写的web题目 [ACTF2020 新生赛]Include1 点进去发现就一个flag.php,源代码和抓包都没拿到好东西 结合题目猜是文件包含&#xff0c;构建payload ?filephp://filter/readconvert.base64-encode/resourceflag.php 得到base64编码过的flag&#xff0c;解码即可 此题…

榜单发布!AR-HUD进入LCoS时代,哪些企业正在领跑

高工智能汽车研究院监测数据显示&#xff0c;今年1-7月中国市场&#xff08;不含进出口&#xff09;乘用车前装标配W/AR HUD交付108.35万辆&#xff0c;同比增长47.98%&#xff0c;前装搭载率升至9.82%。 其中&#xff0c;从价位区间分布来看&#xff0c;30万元及以上车型标配W…