首页 > 编程语言 >【微信小程序开发】API使用、自定义组件、页面实现图解超详细

【微信小程序开发】API使用、自定义组件、页面实现图解超详细

时间:2024-07-27 14:26:25浏览次数:22  
标签:生命周期 自定义 微信 程序开发 res 组件 wx 页面

文章目录


更多相关内容可查看

常用API

官网API地址

全局对象是: wx,所有的 API 都保存在wx对象中

消息交互

 wx.showToast({
      title: '成功',
      icon: 'success',
      duration: 2000
    })

图示:

在这里插入图片描述

消息加载

小提示:要主动关闭-hideloading

wx.showLoading({
  title: '加载中',
})

setTimeout(function () {
  wx.hideLoading()
}, 2000)

在这里插入图片描述

转发给朋友

onShareAppMessage

在这里插入图片描述

模态对话框

wx.showModal({
  title: '提示',
  content: '这是一个模态弹窗',
  success (res) {
    if (res.confirm) {
      console.log('用户点击确定')
    } else if (res.cancel) {
      console.log('用户点击取消')
    }
  }
})

在这里插入图片描述

获取用户信息

wx.getUserInfo({
  success: function(res) {
    var userInfo = res.userInfo
    var nickName = userInfo.nickName
    var avatarUrl = userInfo.avatarUrl
    var gender = userInfo.gender // 性别 0:未知、1:男、2:女
    var province = userInfo.province
    var city = userInfo.city
    var country = userInfo.country
  }
})

在这里插入图片描述

调起客户端扫码界面

// 允许从相机和相册扫码
wx.scanCode({
  success (res) {
    console.log(res)
  }
})

// 只允许从相机扫码
wx.scanCode({
  onlyFromCamera: true,
  success (res) {
    console.log(res)
  }
})

这里电脑会弹出文件夹

发起支付

wx.requestPayment({
  timeStamp: '',
  nonceStr: '',
  package: '',
  signType: 'MD5',
  paySign: '',
  success (res) { },
  fail (res) { }
})

获取位置

wx.getLocation({
 type: 'wgs84',
 success (res) {
   const latitude = res.latitude
   const longitude = res.longitude
   const speed = res.speed
   const accuracy = res.accuracy
 }
})

更多的api都在官方可直接copy使用,这里是给一些没用过的朋友简单做一下示范帮助大家更好的阅读文档


自定义组件

我的理解是相当于在页面中有一小块是封装好的直接拿过来用

创建自定义组件

类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成的component。看下面的代码知道怎么走的就行

component代码

json文件用来说明自己是一个组件代码

{
  "component": true
}

js文件来构建这个组件的内容、数据、方法

//js文件
Component({
  properties: {
    // 这里定义了innerText属性,属性值可以在组件使用时指定
    innerText: {
      type: String,
      value: '我是自定义组件',
    }
  },
  data: {
    // 这里是一些组件内部数据
    someData: {}
  },
  methods: {
    // 这里是一个自定义方法
    customMethod: function () { }
  }
})

wxml文件使用这个组件的内容、数据、方法

<!-- 这是自定义组件的内部WXML结构 -->
<view class="inner">
  {{innerText}}
</view>
<slot></slot>

使用自定义组件

调用component的代码

json文件用来引用组件

{
  "usingComponents": {
    "my-component": "/components/my-component"
  }
}

wxml文件用来使用组件

<view>
  <!-- 以下是对一个自定义组件的引用 -->
  <my-component></my-component>
</view>

wxss用来定义组件的样式

.intro {
  margin: 30px;
  text-align: center;
}

图示

在这里插入图片描述

个人理解:这就是创建组件使用组件的整体流程,万变不离其宗,要注意 调用者的优先级大于组件的优先级,例如:

在这里插入图片描述

组件生命周期

组件的生命周期,指的是组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发( created attached detached )。

  • 组件实例刚刚被创建好时, created 生命周期被触发。此时,组件数据 this.data 就是在 Component构造器中定义的数据 data 。 此时还不能调用 setData 。 通常情况下,这个生命周期只应该用于给组件 this添加一些自定义属性字段。
  • 在组件完全初始化完毕、进入页面节点树后, attached 生命周期被触发。此时, this.data已被初始化为组件的当前值。这个生命周期很有用,绝大多数初始化工作可以在这个时机进行。
  • 在组件离开页面节点树后, detached 生命周期被触发。退出一个页面时,如果组件还在页面节点树中,则 detached 会被触发

在这里插入图片描述

组件所在页面的生命周期

还有一些特殊的生命周期,它们并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理。这样的生命周期称为“组件所在页面的生命周期”,在 pageLifetimes 定义段中定义。其中可用的生命周期包括:

Component({
  pageLifetimes: {
    show: function() {
      // 页面被展示
    },
    hide: function() {
      // 页面被隐藏
    },
    resize: function(size) {
      // 页面尺寸变化
    }
  }
})

在这里插入图片描述

页面实现

这里简单的自己做了几个页面,功能不复杂不会劝退,直接copy即可

淘宝订单简化页面

js页面

// index.js
Page({
  data: {
    imgUrls: [
      '/static/images/a.png',
      '/static/images/b.png',
      '/static/images/c.png'
    ],
    indicatorDots: true,
    autoplay: true,
    interval: 5000,
    duration: 1000,

    binaryInput: '', // 用户输入的二进制字符串
    result: '', // 解析后的汉字结果
  },

  // 输入框内容改变时触发
  inputChange: function(e) {
    this.setData({
      binaryInput: e.detail.value.trim(), // 获取用户输入并去除首尾空格
    });
  },

  // 解析二进制为汉字
  parseBinary: function() {
    let binaryInput = this.data.binaryInput;

    // 检查输入是否为合法的二进制字符串(只包含 0 和 1)
    if (!/^[01]+$/.test(binaryInput)) {
      wx.showToast({
        title: '请输入有效的二进制数字',
        icon: 'none',
        duration: 2000
      });
      return;
    }

    // 调用解析函数,这里假设有一个 parseBinaryToChinese 的函数来实现解析
    let result = parseBinaryToChinese(binaryInput);
    
    console.log('aaaaa');
    // 更新页面显示结果
    this.setData({
      result: result,
    });
    console.log('bbbb');
  }
});
// 解析二进制字符串为汉字的函数
function parseBinaryToChinese(binaryString) {
  // 拆分成每8位一组
  let chunks = binaryString.match(/.{8}/g);

  // 将每组二进制转换成十进制数再转换成字符
  let result = chunks.map(chunk => String.fromCharCode(parseInt(chunk, 2))).join('');

  return result;
}

wxml页面

<!-- index.wxml -->
<view class="container">
  <view class="navigation-bar">
    <!-- 导航栏的内容 -->
    <text class="navbar-title">美化页面</text>
  </view>


  <view class="swiper-container">
    <swiper class="swiper" indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">
      <block wx:for="{{imgUrls}}" wx:key="index">
        <swiper-item>
          <image src="{{item}}" class="slide-image" mode="aspectFill"></image>
        </swiper-item>
      </block>
    </swiper>
  </view>

  <view class="input-container">
    <input class="input" placeholder="请输入二进制数字" bindinput="inputChange" />
    <button class="button" bindtap="parseBinary">解析成汉字</button>
  </view>

  <view class="result">{{ result }}</view>
</view>

wxss页面

/* index.wxss */
.container {
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: center;
  height: 100vh; /* 设置容器高度为整个视口高度,确保页面铺满 */
}

.navigation-bar {
  width: 100%;
  background-color: #333; /* 导航栏背景色 */
  color: #fff; /* 导航栏文字颜色 */
  text-align: center;
  position: fixed; /* 导航栏固定在页面顶部 */
  top: 0;
  z-index: 1000; /* 确保导航栏在页面顶部 */
}

.swiper-container {
  width: 100%;
  overflow: hidden; 
  margin-top: 0; /* 取消轮播图容器的顶部间距 */
}

.swiper {
  width: 100%;
  height: 200px; /* 调整轮播图高度 */
}

.slide-image {
  width: 100%;
  height: 100%;
  border-radius: 10px;
}

.result {
  margin-top: 20px; /* 调整结果显示区域与输入框区域的间距 */
  text-align: center;
}

.input-container {
  width: 80%;
  display: flex;
  margin-top: 20px;
  flex-direction: column;
  align-items: center;
  margin-bottom: 20px;
}

.input {
  width: 100%;
  height: 40px;
  margin-bottom: 10px;
  font-size: 14px;
  padding: 10px;
  border: 1px solid #ccc;
  border-radius: 5px;
}

.button {
  cursor: pointer;
  font-size: large;
  font-family: inherit;
  font-weight: bold;
  color: #0011ff;
  background-color: #f8f8fd;
  padding: 0.8em 2.2em;
  border-radius: 50em;
  border: 6px solid #8b93f8;
  box-shadow: 0px 8px #1f35ff;
}
.button:active {
  position: relative;
  top: 8px;
  border: 6px solid #646fff;
  box-shadow: 0px 0px;
}

效果图

在这里插入图片描述

饮品订单简化页面

这里直接附源码地址了:gitee

图示

在这里插入图片描述

本篇总结

因个人能力尚浅,没写很复杂很难得东西怕解释错误,这里也是带朋友们一起对整体框架有所了解,以便大家更容易上手及阅读代码

这里附两个个好用的免费网站,很实用哦!

阿里云图标库

CSS图示代码

标签:生命周期,自定义,微信,程序开发,res,组件,wx,页面
From: https://blog.csdn.net/Aaaaaaatwl/article/details/140705226

相关文章

  • python+flask计算机毕业设计外卖食品安全监管微信小程序(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,外卖行业作为“互联网+餐饮”的典范,近年来呈现出井喷式增长态势,极大地便利了人们的日常生活。然而,外卖食品......
  • Asp .Net Core 系列:详解授权以及实现角色、策略、自定义三种授权和自定义响应
    什么是授权(Authorization)?在ASP.NETCore中,授权(Authorization)是控制对应用资源的访问的过程。它决定了哪些用户或用户组可以访问特定的资源或执行特定的操作。授权通常与身份验证(Authentication)一起使用,身份验证是验证用户身份的过程,授权与身份验证相互独立,但是,授权需要一种身......
  • 基于微信小程序的社区养老一站式服务系统设计与实现
    ......
  • 解密黑盒:Mojo模型中自定义模型解释性报告的动态生成
    解密黑盒:Mojo模型中自定义模型解释性报告的动态生成在机器学习领域,模型的可解释性是一个至关重要的议题。Mojo模型,作为一个通用术语,可以指代任何机器学习或深度学习模型。随着模型被集成到生产环境中,提供模型决策的透明度和可解释性变得尤为关键。本文将探讨如何在Mojo模型......
  • Postman自定义插件全攻略:扩展你的API开发工具箱
    Postman自定义插件全攻略:扩展你的API开发工具箱Postman作为API开发的瑞士军刀,其强大的功能集已经为开发者所熟知。但你知道吗?Postman还允许开发者使用自定义插件来进一步扩展其功能。这些插件可以帮助自动化重复性任务、增强测试能力,甚至集成其他服务。本文将详细介绍如何......
  • 【WSL2】在Windows通过自定义域名访问wsl2中的服务
    前言目前在windows与windows的wsl系统之间,宿主机无法通过相对较固定的方式来进行网络访问,通常需要使用wsl的ip来访问,而ip可能不是很直观并且可能会有变更,当前教程解决了这个问题,通过hosts映射的方式实现windows宿主机访问wsl服务。脚本的原理:在linux启动时,执行一次修改windows......
  • 微信小程序地图Map结合canvas实现手动绘制地图区域
    1.功能概述在微信小程序中,用户手动在地图上绘制区域,将绘制的区域边界点转换为经纬度在地图上显示绘制的区域。此功能实现了用户与地图的交互,可以应用于地理围栏、区域标记等场景。2.实现步骤2.1获取用户位置在小程序加载时,使用wx.getLocation获取用户的当前位置,并......
  • Qt自定义控件
    开发系统:ubuntu22.04IDE:clion构建工具:cmakeQt自定义控件之插件形式插件形式是指将自定义控件按照一定的规则,生成动态库,放到Qtdesigner插件加载目录/usr/lib/x86_64-linux-gnu/qt5/plugins/designer下,Qtdesigner启动时加载,自定义控件就像内置控件一样可以直接拖拽。下面......
  • uniapp(安卓苹果app端) - 微信小程序分享提示报错“由于不支持的分享类型无法分享到微
    问题说明在uni-app(手机app端)安卓Android、苹果ios系统中,解决分享微信小程序时,页面提示:由于不支持的分享类型无法分享到微信|由于应用和小程序未绑定在同意微信开放平台账号,无法分享到微信,uniApp开发App分享微信时出现无法分享且报错提示、分享不可用、微信appid、配置......
  • 微信小游戏之 三消(一)
               首先设定一下单个方块cell类:类定义和属性`init`方法 用于初始化方块,接收游戏实例、数据、宽度、道具类型和位置。`onWarning`方法 设置警告精灵的帧,并播放闪烁动作,用于显示方块的警告状态。 `grow`方法 根据传入的方向(上下......