小程序原生开发常用

微信小程序 授权 登录 微信小程序授权登录是指通过微信开放平台提供的接口,获取用户的授权信息,实现登录功能。获取用户同意,获取授权登录。使用获取到的临时登录凭证 code,向微信服务器请求用户的 openid 和 session_key。使用 openid 和 session_key 进行后续业务逻辑处理。 阅读详情
AI摘要

本文详细介绍了在小程序中如何设置组件顶部标题、管理样式隔离,以及组件生命周期中设置导航栏标题的方法。同时,讲解了页面间的数据传递、自定义组件的使用、事件监听、键盘收起、动画实现等核心功能。此外,还涵盖了canvas操作、图片转换为base64编码等技术点。

独立页面设置顶部标题

index.json

  "navigationBarTitleText":"个人中心",
设置组件受页面wxss的影响

组件样式隔离 styleIsolation

通常公共样式写在app.wxss中,通常情况开发组件,组件与页面的样式是隔断的,所以会有“app.wxss的样式在组件不起效”的疑问。
设置 在 组件的 json 中设置

"styleIsolation":"apply-shared"

即可让app.wxss样式在该组件生效。
具体的其他情况的值设置,配置位置根据基础库也会有所区别,具体请看文档。

组件设置顶部title

组件生命周期attached设置:

attached:function(){
    wx.setNavigationBarTitle({
      title: '个人中心',
    })
  }
页面使用组件的method中的方法

页面中:

// wxml
<component-reset  id="componentReset" />

...
// js
onReady(){
	this.componentReset=this.selectComponent("#componentReset");
}

onShow(){
	this.componentReset.show();//使用组件的show方法
}
页面监听组件事件触发
// 组件
show(){
	  this.triggerEvent('showHandle');
}

//页面使用
<component-reset  bindshowHandle="showHandle"/>

页面A向页面B传值
// pageA.js
wx.navigateTo({
  url: 'pageB?id=1',
  success: function(res) {
    // 通过eventChannel向被打开页面传送数据
    res.eventChannel.emit('acceptDataFromPageA', { data: 'pageA的数据' })
  }
})
// pageB.js
Page({
  onLoad: function(option){
    const eventChannel = this.getOpenerEventChannel()
    // 监听pageA的emit事件,获取上一页面通过eventChannel传送到当前页面的数据
    eventChannel.on('acceptDataFromPageA', function(data) {
      console.log(data) //  { data: 'pageA的数据' }
    })
  }
})
页面A接收来自页面B的值

应用在从A取B拿到值后,返回值到A页面并填充到对应的参数

// pageA.js
wx.navigateTo({
  url: 'pageB?id=1',
  events: {
    // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
    acceptDataFromPageB: function(data) {
      console.log(data)//  {data: item,msg:'pageB的数据'}
       this.setData({
            pageB:data
       })
    }
  }
})
//pageB.js  选中数据(selectItem)后传值并返回上一步
Page({
  selectItem(item){
    const eventChannel = this.getOpenerEventChannel()
    eventChannel.emit('acceptDataFromPageB', {data: item,msg:'pageB的数据'});
     wx.navigateBack({
      delta: 1,
    })
  }
})

也可通过设置上一个页面属性向pageA传值:

 let pages = getCurrentPages(); //当前页面
      let prevPage = pages[pages.length-2]; //上一页面
      prevPage.selectBankNoCallback(info)// 触发上一个页面定义的方法 selectBankNoCallback
关闭索引提示

警告信息:

根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引

关闭配置:
project.config.json 中 "checkSiteMap"配置为false;

无效的 app.json permission[“scope.userInfo”]

原因:permission目前只需配置scope.userLocation

获取小程序的版本环境
 var ev=__wxConfig.envVersion;
		// console.log('版本:',ev)
		// 版本: ‘develop’, //开发版
		// 版本: ‘trial’, //体验版
		// 版本: ‘release’, //正式版
style动态
--width--: {{ viewWidth }}px
让view 垂直水平具中

父级设置:

display: flex;
  align-items: center;
  justify-content: center; //水平
动态改变data
 this.setData({
            [`pointsLocation.${'name'}`]: res[0]
          })
自定义导航

json

  "navigationStyle":"custom"

js

getTopTabH(){
     const _this=this;
      wx.getSystemInfo({
      success(res) {
        // 获取右上角胶囊的位置信息
        let info = wx.getMenuButtonBoundingClientRect()
        let CustomBar = info.bottom + info.top - res.statusBarHeight
        // let CustomBar = info.bottom 
        // console.log('设备信息',info,res,CustomBar)
        _this.globalData.topTabInfo={
          height:CustomBar,//这个基本就是顶部到胶囊下面的距离
          titleT:info.top,//标题的定位top位置
          titleH:info.height,//标题的高
          bottom:info.bottom,
        };
      }
    })
  },
获取base64图片数据
 chooseImageHandle(callback){
    wx.chooseImage({
      count: 1,
      sizeType:['compressed'],
      sourceType:['album', 'camera'],
      success:res=>{
        const imgPath=res.tempFilePaths[0];
        wx.request({
          url: imgPath,
          method:"GET",
          responseType:"arrayBuffer",
          success:base64Img=>{
            const base64=wx.arrayBufferToBase64(base64Img.data);
            callback(base64);
          }
        })
      }
    })
  },
picker 使用json时
 <picker bindchange="pickerChange" data-field="homeOwnship" data-option="homeOwnshipOptions" value="{{formData.homeOwnship}}" range="{{homeOwnshipOptions.arr}}" range-key="name">
              <view class="picker {{!formData.homeOwnship?'noPickerData':''}}">
                {{homeOwnshipOptions.obj[formData.homeOwnship]}}
              </view>
            </picker>
 const homeOwnship=app.globalData.homeOwnship;
    var homeOwnshipArr=[];
    for(var key in homeOwnship){
      homeOwnshipArr.push({id:key,name:homeOwnship[key]});
    }
    this.setData({
      homeOwnshipOptions:{
        arr:homeOwnshipArr,
        obj:homeOwnship
      }
    })

  pickerChange(e){
    const {field,option} = e.currentTarget.dataset
    this.setData({
        [`formData.${field}`]: this.data[option].arr[e.detail.value].id
    })
  },
收起键盘
      wx.hideKeyboard()
动画实现
<!--动画元素-->
<view animation="{{animationData}}">
  data: {
    animationData:{},
	}
	
//实现往上滑入 (下面使用的是height实现,用top也可以实现的  top 0 到100vh)
  open(){
    var animation = wx.createAnimation({
      duration: 300,
      timingFunction: 'ease',
    })
    this.animation = animation;
    animation.height('100vh').step();
    this.setData({
      animationData:animation.export()
    })
  },
  //往下滑出
  close(){
    this.animation.height('0').step();
    this.setData({
      animationData:this.animation.export()
    })
  },
当实现内容高度不确定的
.Mask{// 底部
  height: 0;
  overflow-y: auto;
  position: fixed;
  bottom: 0;
  width: 100%;
  background-color: rgba(0,0,0,0.6);
  z-index: 2;
}

.MaskMain{ //内容
  position: absolute;
  left: 0;
  bottom: 0;//当需要内容充满弹窗,这里加top:0  或是直接将mask作为内容就好
  right: 0;
  background-color: #fff;
  border-radius: 16rpx 16rpx 0 0;
}

自定义组件带slot

小程序也可使用类似vue的插槽slot

组件.wxml

 <view>
   暂无数据
    <slot name="content"></slot>
  </view>

组件.js
js这里Component的options参数必须要设置,否则使用的时候没有效果

 options:{
    multipleSlots:true
  },

使用:

<comNoData>
    <view slot="content">
        <text class="peimaryBg radiusLg">立即添加</text>
      </view>
  </comNoData>

阻止冒泡

catchtap 例如:

<view catchtap="saveImg" class=" button gradientPrimaryBg radiusLg centerText fl">保存图片</view>

图片path地址转base64

let base64Img =  'data:image/jpg;base64,' +  wx.getFileSystemManager().readFileSync(path, "base64")

canvas输出图片

 wx.canvasToTempFilePath({
    canvasId: 'canvasId',
    fileType: 'jpg',
    quality: 0.8, //图片质量
    width: canvasw,
    height: this.data.drawHtmlCanvasH,
    success: res => {
      this.setData({
        resCanvasImg:res.tempFilePath
      })
    }
  }, this)

canvas输出base64

此处用的是先输出path,再转base64

 let base64Img =  'data:image/jpg;base64,' +  wx.getFileSystemManager().readFileSync(path, "base64")
微信小程序开发中的麦克风录音和音频上传 以上就是使用微信小程序API实现麦克风录音和音频上传的示例代码。通过这些代码,我们可以在小程序中实现录音和上传功能,从而提供更丰富的用户体验。麦克风录音和音频上传是微信小程序开发中常见的功能。在本篇文章中,我们将详细介绍如何使用微信小程序的API来实现麦克风录音和音频上传的功能。我们需要提供上传的URL、文件路径、文件名等参数。接下来,我们需要实现音频上传功能。来开始录音,并将录音文件的临时路径保存到。接下来,在小程序的页面中,我们可以使用。在上面的代码中,我们通过设置。在上面的代码中,我们通过调用。 阅读详情

相关推荐

ESP32的SDK开发之blufi一键配网微信小程序端开发

        上一篇文章简单介绍了blufi配网协议,现在来讲讲再微信小程序端实现配网的控制,小程序开发是基于官方原生API开发。本人的微信小程序开发也是初学的,由于之前没接触过前端开发,软件写的很渣渣。        蓝牙BLE的开发涉及到很多数据转换,这些算法都是网上搜罗的,就不一一讲解了,这里先列出常用的几种转换算法: 1、ArrayBuffer转16进制格式字符串 function...

LinQiPing233的博客 5125

小程序的授权和获取userInfo

小程序官方在2021年4月28日后修改了`wx.getUserInfo`函数,所以导致目前网上大部分的文章已经不适用于解决目前小程序授权和获取userInfo的问题。

h2763246823的博客 4582

小白如何为微信小程序添加音频识别和语音功能

为微信小程序添加音频识别和语音功能可以使用微信开发者工具和微信小程序提供的API来实现。下面是一个示例代码,详细介绍了如何添加音频识别和语音功能。需要替换代码中的'语音合成接口的URL'为真实的语音合成接口的URL,'需要合成语音的文本'为需要合成语音的文本。以上就是为微信小程序添加音频识别和语音功能的代码案例,你可以根据实际需求进行修改和拓展。需要替换代码中的'音频识别接口的URL'为真实的音频识别接口的URL。

qq_67153941的博客 489

uni-app开发微信小程序getLocation 需要在app.json中声明permission字段解决办法

小程序更新了部分配置,位置授权要先在app.json里声明一下,这在以前是不需要,会提示getLocation 需要在app.json中声明permission字段,如图 解决办法: 在manifest.json中加入下面这段代码 "permission": { "scope.userLocation": { "desc": "你的位置信息将用于小程序位置接口的效果展示" ...

CaseyWei 8376

小程序getLocation需要在app.json中声明permission字段

主要介绍了小程序getLocation需要在app.json中声明permission字段,个别需要获取用户地理位置的在开发者工具调试时会出现getLocation需要在app.json中声明permission字段 ,下面我们就一起来解决一下

phpstudy自定义安装mysql8.3并启动

下载压缩包文件然后按下面的图片一步一步操作选择版本,选择第一个压缩包文件,下载下载完成后,解压到phpstudy环境目录下

互联网碎碎念 2801

小程序开发必备:常用原生API指南及Vue对比

作为一个成熟的应用开发平台,微信小程序除了提供基本的网络请求API外,还为开发者开放了大量其他原生功能,涵盖界面跳转、设备信息获取、支付等多个领域。熟练掌握这些小程序原生API的使用,能够帮助我们更好地发挥小程序的能力,构建出功能丰富、用户体验优秀的应用。在本文中,我将为大家介绍几个常用的小程序原生API,并与在Vue.js开发中的对应方式进行对比,帮助有Vue开发经验的开发者能够更快地过渡到小程序开发。好的,我继续补充一些小程序中常用的原生API,并给出使用示例以及在Vue.js开发中的对应方式。

笔记、经验、日常分享 1692

论文阅读4——一种宽频带圆极化微带天线的设计

论文阅读——一种宽频带圆极化微带天线的设计(现在才觉得开始弄懂了一点,懂了一点之后又更糊涂了……)

weixin_64612422的博客 2316

原生微信小程序开发--项目搭建与常用语法

1.下载微信开发者工具。点击进入下载地址 选择稳定版,安装好之后,开始创建项目。 2.新建项目,AppID需要到微信小程序公众平台上注册后才能获取。也可先用测试号创建。 3.了解项目结构,pages下可以看到默认创建的index文件夹,里面包含.js,.wxss,.json,.wxml 四个不同后缀的文件。.js写逻辑,wxss写样式,json做配置(比如想单独给该页面设置下拉,就需要在这里单独配置enablePullDownRefresh,如果想做全局配置需要在下面app.json中设置。),wxml是

预见的力量 1423

MATLAB/Simulink实战:三电平逆变器SVPWM调制从入门到精通(附完整仿真模型)

本文提供了一份详尽的MATLAB/Simulink实战指南,手把手教你从零搭建三电平逆变器的SVPWM调制系统。文章深入剖析了27个空间矢量的分区与分解算法,并完整实现了包含中点电位平衡控制的Simulink仿真模型,旨在帮助电力电子与电机控制领域的学习者和工程师跨越从理论到实践的鸿沟。

sugar的博客 1213

从零开始:如何利用Device Monitoring Studio构建高效数据监控系统

本文详细介绍了如何利用HHD Device Monitoring Studio从零开始构建高效数据监控系统。涵盖基础架构设计、核心功能解析、实战部署指南及高级数据分析技术,帮助用户实现非侵入式监控,提升设备调试和网络协议分析效率。特别适合物联网和工业自动化领域的开发者与运维人员。

weixin_29201859的博客 327

微信小程序原生开发:常用事件与属性列表

可以发现:【当 num 发生改变时,总价格也发生了对应的变化】可是大家需要知道,现在我们是在【小程序】中,那么如果想要给。小程序具体事件列表,可以点击。,接下来就需要 **修改 num 的值 **接收一个 对象作为参数,这个对象就是最新的。问题在于:我们如何给这个按钮添加点击事件呢?有过开发经验的同学,可能会猜到:我们可以给。而是 bind:tap / bindtap。中的数据,那么我们需要借助一个函数。添加点击事件则不可以使用。事件来监听按钮的点击。,所以我们还需要拿到。

蓝鲸鱼计算机软件开发工作室 939

PlutoSDR驱动安装避坑指南:从设备管理器异常到MATLAB 2023b完美识别

本文是一份详细的PlutoSDR驱动安装与MATLAB 2023b集成排错指南。针对Windows系统下常见的设备管理器异常、驱动兼容性问题,提供了从旧驱动清理、手动指定驱动文件到USB连接稳定性排查的完整解决方案。重点阐述了如何通过离线安装硬件支持包,并利用MATLAB命令进行连接测试与射频信号验证,最终实现设备的完美识别与稳定调用。

weixin_29159441的博客 428

微信小程序开发

一,小程序基础知识 1.了解: 2.介绍: 主体文件 又称小程序全局文件,顾名思义,全局文件能够作用于整个小程序,影响到小程序的每个页面,且主体文件必须放到项目的根目录下,主要由三部分组成: 文件名 作用 是否必须 app.js 小程序入口文件 必须 app.json 小程序的全局配置 必须 app.wxss 小程序的全局样式 非必须 页面文件 是每个页面所需的文件,小程序页面文件都存放在 pages 目

娜的博客 1627

PDF批量加水印 与 去除水印实践

我们可以给PDF加图片水印或文字水印,要去除图片水印,一般只需要删除最后一个图片对象即可。要去除文字水印,需要保证主体内容和文字水印在/Contents中位于不同的对象内,这样我们只需要删除文字水印对应的对象即可删除水印。而对于主体内容和文字水印已经混合在一个对象时,本文的提供的方法则无能为力,需要进一步深入分析PDF细节。

小小明-代码实体的专栏 2757

史上最全的Logisim运算器实验教程(基于华中科技大学计算机组成原理实验)

本博客是实现了Logisim的运算器设计,有具体的运算器设计的思路和运算器设计的电路,适合一步一步的按照思路做。

qq_62325622的博客 4万+

跨平台开发常用技术栈及vue(web项目)打包手机安装包流程、uni-app发布小程序流程

跨平台开发常用技术栈及 vue(web项目)打包手机安装包流程、uni-app发布小程序流程

S_404_Not_Found的博客 1247

【以太网硬件十二】以太网端口自协商过程解密之二

简述以太网端口自协商的过程

highman110的博客 2488

jh-weapp-demo:小程序开发者的福音

jh-weapp-demo:小程序开发者的福音 项目介绍 jh-weapp-demo 是一个功能丰富、组件齐全的小程序开源项目,旨在帮助开发者快速实现各种常用效果,并封装了大量通用组件和工具类。无论你是小程序开发新手还是经验丰富的开发者,jh-weapp-demo 都能为你提供极大的便利,让你在开发过程中事半功倍。 项目技术分析 jh-weapp-demo 基于微信小程序原生开发,充分利用了小程序...

gitblog_00862的博客 883

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

考研刷题小程序云开发实战-基础知识储备(2)

考研刷题小程序项目,它的技术栈基于微信原生小程序和云开发能力,所以需要在本地安装微信开发者工具,初始化考研刷题小程序项目,认识项目目录结构与配置文件,以及了解和学习相关框架知识,这样会对学习或者直接使用本项目均有很大的帮助。

mon_star°的博客 1221

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

微信小程序开发使用技术栈

Vue是一个流行的JavaScript前端框架,它可以通过`uni - app`或者`mp - vue`等框架来开发小程序。`uni - app`是一个使用Vue.js开发所有前端应用的框架,一套代码可以同时生成小程序、H5、App等多种应用。Django是一个功能强大的Web框架,自带了很多实用的功能,如数据库管理、用户认证系统等。这是一个关系型数据库管理系统,在小程序开发中,如果数据量较大且需要复杂的查询操作,MySQL是很好的选择。这是一个轻量级的关系型数据库,适合在小程序本地存储少量的数据。

gagaxixinzt7的博客 1154

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

uniapp的ui框架,小程序ui框架

uniapp能使用的ui框架分为vue组件ui框架和原生小程序框架小程序。官方说明:小程序组件不是vue组件,并且每家小程序都有自己的组件规范,比如微信小程序的组件是wxml格式。小程序组件不是全端可用,支持度最广的微信小程序自定义组件,也只能支持微信小程序、app-vue、web,其他平台无法兼容。在使用方面,若是使用uniapp进行开发,使用小程序原生组件,则不能参考原生示例,需要修改成vue语法,所以在开发过程中,需要花时间进行转换。若是使用小程序开发工具开发,则只可以选择原生小程序组件进行开发。

2119

微信小程序接入快递100,查询快递信息(免费接入)

【代码】微信小程序接入快递100,查询快递信息(免费接入)

pony君的博客 4928

Axios、Fetch、原生Ajax、微信小程序的wx.request是什么?使用方法是?(简洁且带有代码示例)

Axios、Fetch和原生AJAX、微信小程序的wx.request都是用于在前端发送网络请求的工具。它们可以用来与服务器通信并接收响应数据。

m0_59704905的博客 2919

关于腾讯UI规范、移动端WEUI、小程序端WXSS、小程序组件

移动端WEUI、小程序端WXSS、小程序组件,几个概念新手比较容易弄混,现记录一下 1.腾讯基本UI规范 用于XD或其它UI设计软件的规范文件项目: https://github.com/weui/weui-design 腾讯官网: https://tdesign.tencent.com/ 2.移动端的WEUI WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一。 https://weui.io/ 3.小程序端的UI及组件 (1)

李小砍的技术博客 2697

小程序组件、框架

小程序第三方组件选择 WeUI 微信 MinUI Vant Weapp 有赞 Wux Weapp animate.css ColorUI 雀语 http://demo.color-ui.com/h5-index.html#/ iView Weapp

轻颜小弟的博客 174
上一篇: 小程序使用npm包
下一篇: elementUI动态添加校验规则
KeroroLX
博客等级 码龄9年 21粉丝 101原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值