微信小程序基本语法

官网 https://developers.weixin.qq.com/miniprogram/dev/framework/
视频教程:尚硅谷微信小程序开发教程,2024最新微信小程序项目实战!
仿慕尚花坊项目源码:https://gitee.com/abcdfdewrw/flower-workshop

目录

  • 一,初识微信小程序
  • 二,文件和目录结构介绍
  • 三,配置文件介绍
  • 四,尺寸单位rpx
  • 五,事件绑定和事件对象
      • 【事件绑定】
      • 【事件传参】
  • 六,事件/阻止事件冒泡
  • 七,声明和绑定数据
  • 八,setData修改数据
  • 九,简易版双向数据绑定
  • 十,列表渲染
  • 十一,条件渲染
  • 十二,小程序的运行机制
  • 十三,小程序更新机制
  • 十四,小程序生命周期介绍
      • 【应用生命周期】
      • 【页面生命周期】
      • 【组件的生命周期】
      • 【组件所在页面的声明周期】
      • 补充:
      • 总结:
  • 十五,小程序API
      • 【界面交互】
      • 【本地存储】
      • 【路由跳转】
      • 【上垃加载/下拉刷新】
  • 十六,插槽
  • 十七,监听
  • 十八,组件通信
      • 一,父向子传参 Properties
      • 二,子向父传参
      • 三,获取组件实例
  • 十九,小程序分包加载
  • 二十,获取微信头像
  • 二十一,转发功能 / 分享朋友圈
  • 二十二,手机号验证组件
  • 二十三,客服功能
  • 二十四,自定义导航栏
  • 二十五,骨架屏
  • 二十六,mobx-miniprogram
  • 二十七,用户登录
  • 二十八,地理位置功能

一,初识微信小程序

微信小程序是一种运行在微信内部的 轻量级 应用程序。
在这里插入图片描述
小程序的四大特性:无须安装,用完即走,无须卸载,触手可及。

二,文件和目录结构介绍

在这里插入图片描述
在这里插入图片描述

三,配置文件介绍

小程序中常见的配置文件有以下几种:
1,app.json : 小程序全局配置文件,用于配置小程序的一些全局属性和页面路由;
2,页面.json : 小程序页面配置文件,也称局部配置文件,用于配置当前页面的窗口样式,页面标题等;
3,project.config.json:小程序项目的配置文件,用于保存项目的一些配置信息和开发者的个人设置;
4,sitemap.json:配置小程序及其页面是否允许被微信索引,提高小程序在搜索引擎搜索到的概率。

四,尺寸单位rpx

rpx:是小程序新增的自适应单位,它可以根据不同的设备屏幕宽度进行自适应缩放;
小程序规定任何型号手机:屏幕宽都为750rpx

五,事件绑定和事件对象

【事件绑定】

在这里插入图片描述

【事件传参】

第一种方法:data-* 传参
在这里插入图片描述
第二种方法:mark:* 传参
在这里插入图片描述
在这里插入图片描述

六,事件/阻止事件冒泡

事件分为 冒泡事件非冒泡事件
冒泡事件:当一个组件的事件被触发后,该事件会向父节点传递;
非冒泡事件:当一个组件的事件被触发后,该事件不会向父节点传递。

<button catch:tap="btnHandler"></button> // 用catch来阻止事件冒泡

七,声明和绑定数据

在这里插入图片描述

// 展示内容
<text>{{scholle}}</test>

// 绑定属性值,如果需要动态绑定一个变量,属性值也需要使用双大括号进行包裹
<text id="{{id}}">{{scholle}}</test>

// 如果属性值是布尔值,也需要使用双大括号进行包裹
<checkbox checked="{ischecked}" /> 

八,setData修改数据

在这里插入图片描述

// 修改值
this.setData({key:value}) // key 是需要更新的数据;value 是最新的值

九,简易版双向数据绑定

在这里插入图片描述

十,列表渲染

在这里插入图片描述
在这里插入图片描述

  <swiper
    autoplay
    class="swiper"
    indicator-active-color="#FF734C"
    interval="2000"
    duration="1000"
    indicator-color="rgba(0, 0, 0, .3)"
    bindchange="getSwiperIndex"
  >
    <block wx:for="{{ bannerList }}" wx:key="index">
      <swiper-item class="swiper-item">
        <navigator
          class="navigator"
          hover-class="none"
          url="/modules/goodModule/pages/goods/detail/detail?goodsId={{ item.id }}"
        >
          <image class="img" src="{{ item.imageUrl }}"></image>
        </navigator>
      </swiper-item>
    </block>
  </swiper>

十一,条件渲染

在这里插入图片描述

十二,小程序的运行机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十三,小程序更新机制

在这里插入图片描述

 // 检测冷启动版本更新
   onLaunch() {
    const updateManager = wx.getUpdateManager(); // 监听下载的状态

    // 当下载完成新版本以后,会触发 onUpdateReady 回调函数
    updateManager.onUpdateReady(function () {
      // 在回调函数中给用户提示
      wx.showModal({
        title: "更新提示",
        content: "新版本以及准备好,是否重启应用?",
        success: (res) => {
          if (res.confirm) {
            // 强制当前小程序使用新版本并且会重新启用当前小程序
            updateManager.applyUpdate();
          }
        },
      });
    });
  },

十四,小程序生命周期介绍

在这里插入图片描述

【应用生命周期】

在这里插入图片描述

【页面生命周期】

在这里插入图片描述
onReady 代表页面已经准备妥当,可以和视图层进行交互

【组件的生命周期】

在这里插入图片描述

// 组件生命周期声明对象
lifetimes {
    created() {},
    attached() {},
    ……
}

【组件所在页面的声明周期】

在这里插入图片描述

补充:

1,tabBar页面之间相互切换,页面不会被销毁;
2,点击左上角,返回上一个页面,会销毁当前页面。
在这里插入图片描述

总结:

在这里插入图片描述
在这里插入图片描述

十五,小程序API

【界面交互】

wx.showLoading() // 显示loading提示框
wx.hideLoading() // 关闭loading提示框
wx.showModal() // 模态对话框
wx.showToast() // 消息提示框

【本地存储】

在这里插入图片描述

【路由跳转】

在这里插入图片描述

【上垃加载/下拉刷新】

onReachBotoom() {} // 监听用户上拉加载
onPullDownRefresh(){} // 监听用户下拉刷新

在app.json或者page.json 中配置距离页面底部距离:onReachBottomDistance;默认50px

十六,插槽

在这里插入图片描述

十七,监听

在页面的的js中写上 observers{
    'key':(newValue) => {}
}

// 监听单个属性
observers: {
    'n1': function(newN1){
     ……
    }
  },

// 监听多个数据
observers: {
    'n1, n2': function(newN1, newN2){
      ……
    }
  },
  
  // 监听全部对象
  observers: {
    'obj.**': function(newObj){
     ……
    }
  },
  

十八,组件通信

一,父向子传参 Properties

二,子向父传参

子组件:
sendData() {
    this.triggerEvent('myevent',this.data)
}

父组件:
……
<customer bind:myevent="getData" /> // 子组件
……

getData(event) {
    ……
}

三,获取组件实例

// 在父组件中 获取 子组件的实例
……
<customer bind:myevent="getData" class='child' /> // 子组件
……

getChild() {
    const res = this.selectComponent('.child') // 类似于 ref
}

十九,小程序分包加载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 --app.json 
   // 分包设置
  "subPackages": [
    {
      "root": "modules/settingModule", // 分包根目录
      "name": "settingModule", // 分包别名
      "pages": [ // 分包路径
        "pages/address/add/index",
        "pages/address/list/index",
        "pages/profile/profile"
      ]
    }
  ],
  
  // 分包预下载
  "preloadRule": { // key:value的形式:key代表的是 当访问到这个目录的时候,预下载分包
    "pages/settings/settings":{ 
      "network": "all",
      "packages": ["settingModule"]
    }
  }

二十,获取微信头像

在这里插入图片描述

    <view class="avatar">
      <button
        hover-class="none"
        open-type="chooseAvatar"
        bind:chooseavatar="onChooseAvatar"
      >
        <image src="{{ userInfo.headimgurl || '/assets/images/avatar.png' }}" />
      </button>
    </view>


  async onChooseAvatar(e) {
      const { avatarUrl } = e.detail;

      const { data } = await reqUploadFile(avatarUrl, "file");
      this.setData({
        "userInfo.headimgurl": data.data,
      });
    },

在这里插入图片描述

   <form bindsubmit="getNickName">
      <input
        type="nickname"
        name="nickname"
        class="input-name"
        value="{{ userInfo.nickname }}"
      />
      <view class="dialog-content">
        <button class="cancel" bindtap="cancelForm" form-type="reset">取消</button>
        <button class="confirm" type="primary" form-type="submit">确定</button>
      </view>
    </form>

    getNickName(event) {
      // console.log('弹窗确定=》',event);
      const { nickname } = event.detail.value;
      this.setData({
        "userInfo.nickname": nickname,
        isShowPopup: false,
      });
    },

二十一,转发功能 / 分享朋友圈

在这里插入图片描述
在这里插入图片描述

  // 转发功能
  onShareAppMessage(){
    return {
      title:"只为你怦然心动",
      path:'/pages/index/index',
      imageUrl:'../../../../../assets/images/love.jpg'
    }
  },

  // 分享朋友圈
  onShareTimeline() {
   return {
     title:"只为你怦然心动",
     path:'/pages/index/index',
     imageUrl:'../../../../../assets/images/love.jpg'
   }
  },

二十二,手机号验证组件

在这里插入图片描述

二十三,客服功能

在这里插入图片描述

二十四,自定义导航栏

在这里插入图片描述

二十五,骨架屏

在这里插入图片描述
可在 微信开发者工具 中自动生成骨架屏
在这里插入图片描述

二十六,mobx-miniprogram

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

npm install --save mobx-miniprogram mobx-miniprogram-bindings
-- 创建一个Store对象 userStore
// observable 创建被检测的对象,对象中的属性会被转换为响应式数据
// action 函数是用来显示的定义 action 方法

import { observable, action } from "mobx-miniprogram";

export const userStore = observable({
  token: "",
  userInfo: {},

  setToken: action(function (token) {
    this.token = token;
  }),

  setUserInfo: action(function (userInfo) {
    this.userInfo = userInfo;
  }),
});


-- 页面中导入使用
import { userStore } from "../../../../stores/userstore";
ComponentWithStore({
  storeBindings: {
    store: userStore,
    fields: ["userInfo"],
    actions: ["setUserInfo"]
  },
  })

二十七,用户登录

在这里插入图片描述
在这里插入图片描述

二十八,地理位置功能

首先在 app.json 中声明地理位置方法

--app.json
 
   "requiredPrivateInfos": ["getLocation","chooseLocation"],
  "permission": {
    "scope.userLocation": {
      "desc": "获取地理位置信息用于填写收获地址" // 描述
    }
  }

wx.getLocation 方法

 // 获取用户地理位置信息
  async onLocation() {
    // 获取当前的地理位置(精度,纬度,高度)
    const res = await wx.getLocation();
    console.log("获取用户地理位置=》", res);
  },

如果用户拒绝授权,后面重新授权思路
在这里插入图片描述
wx.chooseLocation() 方法

  // 获取用户地理位置信息
  async onLocation() {
 // 打开地图让用户选择
    const res = await wx.chooseLocation()
    console.log("获取用户地理位置=》", res);
  },

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论 Suspense 组件在 Vue 3 中的重要性

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 你是否曾经遇到过在加载大量数据时,界面卡顿或是空白的问题? 如果你正在开发一个复杂的前端项目,那么一定需要处理很多异步数据请求。而异步请求太多就会导致用户看到空白屏幕时间变长,这对用户体验非常不友好。🤔 在…

redis 配置文件参数详解

1、redis.conf 通用类 Redis的配置文件是一个文本文件&#xff0c;通常名为redis.conf。以下是一些常见配置项的解释和示例&#xff1a; 1、bind 127.0.0.1&#xff1a;绑定的主机地址 2、 protected-mode ,默认是开启状态&#xff0c;一般不需要修改&#xff0c;可以保证服务…

vue3 中 lottie-web 封装组件

用到的JSON文件在“我的资源”里&#xff0c;下面这个链接直达 下面的代码中用到的JSON数据源 Lottie.vue <script setup> import { ref, onMounted } from vue import lottie from lottie-web// 设置组件参数 const props defineProps({renderer: {type: String,def…

【Redis】哨兵(sentinel)

文章目录 一、哨兵是什么&#xff1f;二、 哨兵sentinel文件参数三、 模仿主机redis宕机四、哨兵运行流程和选举原理SDOWN主观下线ODOWN客观下线 五、 使用建议 以下是本篇文章正文内容 一、哨兵是什么&#xff1f; 哨兵巡查监控后台master主机是否故障&#xff0c;如果故障了…

鸿蒙Harmony--文本组件Text属性详解

金樽清酒斗十千&#xff0c;玉盘珍羞直万钱。 停杯投箸不能食&#xff0c;拔剑四顾心茫然。 欲渡黄河冰塞川&#xff0c;将登太行雪满山。 闲来垂钓碧溪上&#xff0c;忽复乘舟梦日边。 行路难&#xff0c;行路难&#xff0c;多歧路&#xff0c;今安在&#xff1f; 长风破浪会有…

手机m4a怎么转换成mp3,手机端即可完成格式转换

M4A&#xff08;MPEG-4 Audio&#xff09;是一种无损压缩的音频格式&#xff0c;通常用于苹果设备和 iTunes 上&#xff0c;因为它能提供较高的音质同时占用较小的存储空间。 然而&#xff0c;MP3 作为最普及的音频格式之一&#xff0c;兼容性更强&#xff0c;几乎所有的播放设…

【MySQL进阶篇】索引

1、索引概述 索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0c…

Leetcode算法题(链表的中间节点+返回倒数第k个节点+合并两个有序链表)

题目1&#xff1a; 本题力扣链接&#xff1a;https://leetcode.cn/problems/middle-of-the-linked-list/solutions/164351/lian-biao-de-zhong-jian-jie-dian-by-leetcode-solut/ 思路1&#xff1a;单指针法 首先我们对链表进行遍历&#xff0c;记录链表的总长度N&#xff0c;…

STM32 - FLASH 笔记

STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;可以对程序存储器和选项字节进行擦除和编程 读写FLASH的用途&#xff1a; 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在程序…

《系统架构设计师教程(第2版)》第11章-未来信息综合技术-06-云计算(Cloud Computing) 技术概述

文章目录 1. 相关概念2. 云计算的服务方式2.1 软件即服务 (SaaS)2.2 平台即服务 (PaaS)2.3 基础设施即服务 (IaaS)2.4 三种服务方式的分析2.4.1 在灵活性2.4.2 方便性方 3. 云计算的部署模式3.1 公有云3.2 社区云3.3 私有云3.4 混合云 4. 云计算的发展历程4.1 虚拟化技术4.2 分…

MQTT服务端EMQX开源版安装和客户端MQTTX介绍

一、EMQX是什么 EMQX 是一款开源的大规模分布式 MQTT 消息服务器&#xff0c;功能丰富&#xff0c;专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条&#xff0c;单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息&#xff0c;同时保证毫秒…

3d导入模型后墙体变成黑色?---模大狮模型网

在展览3D模型设计领域&#xff0c;技术和设计的融合通常是创意和实现之间的桥梁。然而&#xff0c;有时设计师们会遇到一些技术上的挑战&#xff0c;如导入3D模型后&#xff0c;墙体却突然变成了黑色。这种问题不仅影响了设计的视觉效果&#xff0c;也反映了技术应用中的一些复…

二叉搜索树的实现[C++]

文章目录 搜索二叉树概念二叉搜索树的功能查找 实现搜索二叉树节点的定义建立搜索二叉树接口插入搜索打印删除 总结 今天本堂主来一起讨论下什么是搜索二叉树&#xff0c;和如何实现二叉搜索树 搜索二叉树 那么二叉搜索树似乎如何实现搜索呢&#xff1f;二叉搜索树和普通二叉…

Android Media3 技术应用详解

1、音视频基础 一个简单的音视频链路如下&#xff1a; 1&#xff09;采集&#xff0c;音视频经过采集后分别生成音频流和视频帧&#xff0c;音频是流式的物理上没有帧的概念&#xff0c;但为了数据处理的方便实际数据处理中引入了音频帧的概念&#xff0c;一般中间插入静音数据…

py-automapper非常详细的详解——看完不会用你打我

一、py-automapper简介 开发过.Net项目的工程师大部分都用过AutoMapper来进行对象映射&#xff0c;py-automapper就是本第三方包的Python版本。我不太确定Python版本是否覆盖了.Net版本的所有功能&#xff0c;但常用功能都实现了&#xff1a;对象映射、空值处理、属性特殊处理…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-15 SPI接收程序设计

软件版本&#xff1a;Anlogic -TD5.9.1-DR1_ES1.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用安路(Anlogic)FPGA 实验平台&#xff1a;米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

【漏洞复现】WordPress——Recall——SQL注入(CVE-2024-32709)

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 WordPress是一款免费开源的内容管理系统(CMS)&#xff0c;最初是…

Java 反射用法和8道练习题

目录 一、什么是反射二、反射的核心接口和类三、测试代码 Bean 类和目录结构Person 类代码目录结构 四、获取 Class 对象五、获取构造方法 Constructor 并使用六、获取成员变量 Field 并使用七、获取成员方法 Method 并使用八、练习1. 使用反射获取String类的所有公有方法&…

虚拟机:VMware功能,安装与使用

目录 一、虚拟机介绍 二、VMware 1.介绍 2.安装 &#xff08;1&#xff09;根据提示按步骤安装​编辑 &#xff08;2&#xff09;更改软件的安装地址​编辑 &#xff08;3&#xff09;根据自己的需求选择是否需要软件更新​编辑 &#xff08;4&#xff09;根据需求选择…

3. JavaSE ——【逻辑运算符】

&#x1f680; 开场白 亲爱的读者&#xff0c;大家好&#xff01;我是一名正在学习编程的高校生。在这个博客里&#xff0c;我将和大家一起探讨编程技巧、分享实用工具&#xff0c;并交流学习心得。希望通过我的博客&#xff0c;你能学到有用的知识&#xff0c;提高自己的技能&…