首页 > 编程语言 >原生微信小程序

原生微信小程序

时间:2024-04-03 15:23:41浏览次数:19  
标签:原生 function 微信 程序 组件 wx data 页面

小程序框架

目录结构

|- card
	index.js   // 页面逻辑(必需)
	index.wxml // 页面结构(必需)
	index.json // 页面配置
	index.wxss // 页面样式表
|- utils // 工具函数
app.js // 小程序逻辑(必需)
app.json // 小程序公共配置(必需)
app.wxss // 小程序公共样式表
sitemap.json // 爬虫文件
project.config.json // 项目配置文件
project.private.config.json // 项目私人配置文件(优先级更高)

逻辑层

app.js

App({
  onLaunch (options) {},
  onShow (options) {},
  onHide () {},
  one rror (msg) {},
  globalData: 'I am global data'
})

// getApp(整个小程序只有一个 App 实例,是全部页面共享的)
const appInstance = getApp()
console.log(appInstance.globalData) // I am global data

page.js

  • behavior.js
module.exports = Behavior({
	data: { msg: 'behavior类似mixin' },
	methods: { custom() {} }
})
  • index.js
const mineBehavior = require('/path/to/behavior.js')

// Page构造器适用于简单的页面,复杂页面推荐Component构造器
Page({
  behaviors: [mineBehavior],
  data: {
    text: "This is page data."
  },
  onl oad: function(options) {}, // 页面创建时执行
  onShow: function() {}, // 页面出现在前台时执行
  onReady: function() {}, // 页面首次渲染完毕时执行
  onHide: function() {}, // 页面从前台变为后台时执行
  onUnload: function() {}, // 页面销毁时执行
  onPullDownRefresh: function() {}, // 触发下拉刷新时执行
  onReachBottom: function() {}, // 页面触底时执行
  onShareAppMessage: function () {}, // 页面被用户分享时执行
  onPageScroll: function() {}, // 页面滚动时执行
  onResize: function() {}, // 页面尺寸变化时执行
  onTabItemTap(item) { // tab 点击时执行
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  },
  viewTap: function() { // 事件响应函数
    this.setData({
      text: 'Set some data for updating view.'
    }, function() {} /* setDataCallBack */)
  },
  // 自由数据
  customData: { hi: 'MINA' }
})

Component({
  behaviors: ['wx://component-export'],
  // 如果配置该方法,selectCompoent获取的会变成自定义值{ myField: 'myValue' }
  export() {
    return { myField: 'myValue' }
  },
  options: {
    multipleSlots: true // 启用多slot支持
  },
  data: { total: 0 },
  properties: {
    myValue: String
  },
  // 组件所在页面的生命周期
  pageLifetimes: {
    show: function () { },
    hide: function () { },
    resize: function () { },
  },
  // 组件自身的生命周期
  lifetimes: {
    attached: function () { },
    moved: function () { },
    detached: function () { },
  },
  observers: {
    'a,b': function(a,b) {
      this.setData({ total: a + b })
    }
  },
  methods: {
    update: function() {
      // 更新 myValue
      this.setData({
        myValue: 'leaf'
      })
    }
  }
})

路由

注意事项
  • navigateToredirectTo 只能打开非 tabBar 页面。
  • switchTab 只能打开 tabBar 页面。
  • reLaunch 可以打开任意页面。
  • 页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
  • 调用页面路由带的参数可以在目标页面的onLoad中获取。
路由方式 触发
打开新页面 wx.navigateTo或<navigator open-type="navigateTo"/>
页面重定向 wx.redirectTo或<navigator open-type="redirectTo"/>
页面返回 wx.navigateBack或<navigator open-type="navigateBack或"/>
tab切换 wx.switchTab<navigator open-type="switchTab"/>
重启动 wx.reLaunch<navigator open-type="reLaunch"/>

API

wx.chooseMedia() // 选择媒体文件(图片/音视频等)
wx.request() // 发送请求
wx.login() // 登录获取code
wx.requestPayment() // 发起微信支付(需要申请微信支付)
wx.chooseAddress() // 调用收获地址原生界面(地理相关需要开通权限)

// 缓存相关(上限为10M)
wx.setStorage()
wx.setStorageSync()
wx.getStorage()
wx.getStorageSync()
wx.clearStorage()
wx.clearStorageSync()
wx.removeStorage()
wx.removeStorageSync()

// 文件系统(wx.env.USER_DATA_PATH:开发者对这个目录有完全自由的读写权限)
const fs = wx.getFileSystemManager()
fs.writeFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'hello, world', 'utf8')

获取节点信息

// 获取节点坐标信息
const query = wx.createSelectorQuery()
query.select('#the-id').boundingClientRect(function(res){
  res.top // #the-id 节点的上边界坐标(相对于显示区域)
})
query.selectViewport().scrollOffset(function(res){
  res.scrollTop // 显示区域的竖直滚动位置
})
query.exec()

组件

自定义组件

// 需要在当前页面json添加如下配置(如在app.json配置则为全局)
{
  "usingComponents": {
	  "custom-component": "/pages/custom-component/index"
  }
}

组件间通信

// 父组件
<child id="child" bind:fn="fn" />
Page({
	fn() {
		// 获取组件实例
		const child = this.selectComponet('#child')
		console.log(child)
	}
})

// 子组件
<button bind:tap="tap">调用父组件方法</button>
Page({
	tap() {
		// data为传递给父组件数据,option包括是否冒泡/是否捕获/是否穿越边界
		this.triggerEvent('fn', data, option)
	}
})

组件模板

<template name="odd">
	<view>odd</view>
</template>
<template name="even">
	<view>even</view>
</template>
<block wx:for="{{[1, 2, 3, 4, 5]}}">
	<template is="{{item % 2 == 0 ? 'even' : 'odd'}}"/>
</block>

Component构造器
微信小程序开发:微信小程序生命周期总结
组件生命周期
数据监听器
微信支付
地理位置接口新增与相关流程调整
小程序用户信息相关接口调整公告
文件系统
canvas画布
分包加载
微信登录
获取昵称头像
小程序配置/场景值/框架接口/wxml语法/wxs语法
小程序组件

标签:原生,function,微信,程序,组件,wx,data,页面
From: https://www.cnblogs.com/sineava/p/18112762

相关文章

  • ⭐Unity 程序运行时默认出现在屏幕的左上角
    usingSystem.Runtime.InteropServices;usingUnityEngine;publicclassWindowPosition:MonoBehaviour{[DllImport("user32.dll",EntryPoint="SetWindowPos")]privatestaticexternboolSetWindowPos(IntPtrhwnd,inthWndInsertA......
  • 企业如何搭建微信官方公众号?投媒网分享
    在内容运营为主的当下,公众号依旧是主流趋势的重点发力平台,很大程度上占据了用户的时间与眼球,不管在品牌传播,还是用户池的培养上,都占据着天然优势。然而有许多企业老板面对公众号的运营时经常一头雾水,不知道怎么开展。今天投媒网就来和大家聊聊:企业如何搭建微信官方公众号。......
  • Python框架下的qt设计之JSON格式化转换小程序
    JSON转换小程序代码展示:主程序代码:fromPyQt6.QtWidgetsimport(QApplication,QDialog,QMessageBox)importsysimportjsonclassMyJsonFormatter(jsonui.Ui_jsonFormatter,QDialog):#jsonui是我qt界面py文件名def__init__(self):supe......
  • idea从零到精通07之idea数据库管理,作为移动开发程序员
    作者简介引言导航热门专栏推荐视频讲解概述一、打开Database管理界面二、配置数据库连接三、在图形化界面操作四、在控制台查询五、在控制台执行操作六、数据导出方法1,直接在结果控制台导出方法2,在Database管理区中导出七、数据结果的多种展示......
  • 逆袭大厂之路——Java程序员必备金九银十跳槽面试涨薪秘籍
    JAVA集合JAVA多线程并发JAVA基础Spring原理微服务Netty与RPC网络ZookeeperKafka自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是......
  • 用java去实现程序化广告应该有哪些步骤?
    目录1.需求分析和规划2.选择合适的技术栈3.搭建开发环境4.数据库设计5.后端开发6.前端开发7.集成第三方服务8.测试和调试9.部署上线10.持续优化和迭代1.需求分析和规划在这一阶段,我们需要详细分析和理解项目需求,并制定相应的规划和计划。这包括以下几个......
  • 在微信小程序中实现银行支付接入的技术实践
    在微信支付的大力普及下,手续费率也是大家最大的困扰,交易量比较小还可以忍受,但是一天几十万、几百万甚至几千万的交易金额,手续费就会成为商家的最大困扰。再客户极力的推荐增加银行支付接口,我们经过几个月的对接,终于把招商银行、农业银行、工商银行、建设银行的支付接口接入到小......
  • 入门 .NET Aspire: 使用 .NET 简化云原生应用开发
    入门.NETAspire:使用.NET简化云原生应用开发https://devblogs.microsoft.com/dotnet/introducing-dotnet-aspire-simplifying-cloud-native-development-with-dotnet-8/经历多个版本之后,我们一直在朝着我们正在进行的理想目标之一取得进展。使.NET成为全球构建云原生应用......
  • 一个优秀的Android程序员应该侧重于技术还是业务需求?
    前言一个优秀的程序员应该侧重于技术还是业务需求?这是要一个值得探讨的问题…刚入社会时,相信很多朋友都会思考这个问题。有人觉得:“技术当然重要,没有技术根本做不了事。技术高,还可以炫耀,出去找工作轻轻松松,是不是很cool?”也有人觉得:“对程序员来说,业务就是做某一个......
  • java毕业设计点餐小程序[附源码]
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义随着移动互联网的高速发展,人们的生活方式正在发生翻天覆地的变化。尤其是在餐饮领域,传统的纸质菜单和排队点餐方式正逐渐被智能点餐系统所取代。在此背景下,基于Jav......