微信小程序-4

手把手教你用单结晶体管搭建简易振荡电路(含电路图和波形分析) 本文详细介绍了如何使用单结晶体管(UJT)搭建简易振荡电路,包括电路设计、波形分析和实战技巧。通过具体的电路图和参数计算,帮助电子爱好者和工程师快速掌握UJT振荡器的设计与调试方法,适用于脉冲信号生成和时钟源制作等应用场景。 阅读详情

自定义组件

创建组件

在项目的根目录中,创建 components 文件夹,在里面编写我们的自定义主键,如下所示:

在这里插入图片描述

引用组件

局部引用:

  • index.json
// 在页面的 .json 文件中,引入组件
{
	"usingComponents": {
		"my-text2": "/components/test2/test2"
	}
}
  • index.wxml
// 使用组件
<my-test2></my-test2>

全局引用:

  • app.json
{
	"usingComponents": {
		"my-test2": "/components/test2/test2"
	}
}
  • index.wxml
// 使用组件
<my-test2></my-test2>

组件和页面的区别

相同点:

  • 组件和页面都是由 .js、.json、.wxml 和 .wxss 这四个文件组成的

不同点:

  • 组件的 .json 文件中需要声明 "component": true

  • 组件的 .js 文件中调用的是 Component() 函数

  • 组件的事件处理函数需要定义到 methods 节点中

组件的样式

样式隔离:默认情况下,自定义组件的样式只对当前组件生效,不会影响到组件之外的内容

注意:

  • app.wxss 中的样式对自定义组件无效
  • 只有 class 选择器会有样式隔离效果,id 选择器,属性选择器,标签选择器不受样式隔离的影响

建议:在组件和引用组件的页面中,使用 class 选择器,不要使用 id、属性、标签选择器!

在这里插入图片描述

修改组件的样式隔离选项:

有时候,我们希望外界能够控制组件内部的样式,此时,可以通过 styleIsolation 修改组件样式隔离的选项

  • 自定义组件.js
Component({
	options: {
		styleIsolation: 'isolated'
	}
})

在这里插入图片描述

数据|方法|属性

  • 自定义组件.wxml
<view>{{ count }}</view>
<button bindtap="addCount">+1</button>
  • 自定义组件.js
Component({
  // 组件的属性列表
  properties: {
    max:{             // 完整定义属性的方式
      type: Number,   // 属性值的数据类型
      value: 10       // 属性默认值
    },
    // max: Number       // 简化定义属性的方式【不需要指定属性默认值的时候,可以使用简化的方式】
  },

  // 组件的初始数据
  data: {
    count: 0
  },

  // 组件的方法列表
  methods: {
    addCount() {
      if(this.data.count >= this.properties.max) return   // 限制加数的最大值
      this.setData({
        count: this.data.count + 1
      })
    }
  }
})
  • index.wxml
<!-- 使用组件 -->
<view>-----------------------</view>
<test max="15"></test>
<view>-----------------------</view>

在小程序的组件中,properties 属性和 data 数据的用法相同,它们都是可读可写的,只不过:

  • data 更倾向于存储组件的私有数据
  • properties 更倾向于存储外界传递给组件的数据

由于 data 数据和 properties 属性在本质上没有任何区别,因此 properties 属性的值也可以用于页面渲染,或者使用 setData 为 properties 中的属性重新赋值,代码如下:

  • 自定义组件.wxml
// 在自定义组件 .wxml 文件中使用 properties 属性的值
<view> max属性的值:{{ max }} </view>
  • 自定义组件.js
Component({

  properties: { max: Number },		// 定义属性

  methods: {
    addCount() {
      this.setData({ max: this.properties.max + 1 })	// 使用 setData 修改属性的值
    }
  }
})

数据监听器

基本概念:

数据监听器用于监听和响应任何属性和数据字段的变化,从而执行特定的操作。
它的作用类似于 vue 中的 watch 侦听器。
在小程序组件中,数据监听器的基本语法格式如下:

具体演示:

  • 自定义组件.wxml
<view>{{ n1 }} + {{ n2 }} = {{ sum }}</view>
<button bindtap="addN1">n1自增</button>
<button bindtap="addN2">n2自增</button>
  • 自定义组件.js
Component({
  // 组件的属性列表
  properties: {},

  // 组件的初始数据
  data: {
    n1: 0,
    n2: 0,
    sum: 0
  },

  // 组件的方法列表
  methods: {
    addN1() { this.setData({ n1: this.data.n1 + 1 }) },
    addN2() { this.setData({ n2: this.data.n2 + 1 }) },
  },

  // 数据监听节点
  observers: {
    'n1, n2': function(n1, n2) {      // 监听 n1 和 n2 数据的变化
      this.setData({ sum: n1 + n2 })  // 通过监听器,自动计算 sum 的值
    }
  }
})
  • index.wxml
<!-- 使用组件 -->
<view>-----------------------</view>
<test></test>
<view>-----------------------</view>

纯数据字段

基本概念:

"纯数据字段"指的是那些不用于界面渲染的 data 字段

应用场景:

有些情况下,某些 data 中的字段既不会展示到页面上,也不需要传递给其他组件,仅仅在当前组件内部使用,带有这种特性的 data 字段适合被设置为纯数字字段

优势好处:

纯数据字段有助于提升页面更新的性能

使用规则:

Component({
	options: {
		// 指定所有 _ 开头的数据字段为纯数据字段
		pureDataPattern: /^_/
	},
	data: {
		a: true,	// 普通数据字段
		_b: true,	// 纯数据字段
	}
})

组件的全部生命周期函数

在这里插入图片描述

上面这些生命周期函数中,有三个比较重要,分别是 created、attached、detached

  • 组件实例刚被创建好的时候,created 函数会被触发
此时还不能调用 setData
通常在这个生命周期函数中,只应该用于给组件的 this 添加一些自定义的属性字段
  • 在组件完全初始化完毕,进入页面节点树后,attached 函数会被触发
此时,this.data 已经被初始化完毕
这个生命周期很有用,绝大多数初始化的工作可以在这个时机进行(例如:发请求获取初始数据)
  • 在组件离开页面节点树后,detached 函数会被触发
退出一个页面时,会触发页面内每个自定义组件的 detached 函数
此时,适合做一些清理性质的工作

lifetimes 节点

Component({
	// 使用生命周期函数
	lifetimes: {
		attached() {...},	// 在组件实例进入页面节点树时执行
		detached() {...},	// 在组件实例被从页面节点树移除时执行
	}
})

组件所在页面的生命周期

概念:自定义组件的行为依赖于页面状态的变化,此时就需要用到"组件所在页面的生命周期"

在这里插入图片描述

使用:组件所在页面的生命周期函数,需要定义在 pageLifetimes 节点中

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

插槽

概念:在自定义组件的 wxml 结构中,可以提供一个 节点(插槽),用于承载组件使用者提供的 wxml 结构

单个插槽:每个小程序中,默认每个自定义组件中只允许使用一个进行占位,这种个数上的限制叫做单个插槽

  • 自定义.wxml
<view>
  <view>组件内部节点(上)</view>
  <slot></slot>
  <view>组件内部节点(下)</view>
</view>
  • index.wxml
<view>这里是index</view>
<test>
  <view>这些文字是插入到组件slot中的</view>
</test>
  • 运行结果
这里是index
组件内部节点(上)
这些文字是插入到组件slot中的
组件内部节点(下)

启用多个插槽:在小程序的自定义组件中,需要使用多个 插槽时,可以在组件的 .js 文件中,通过如下方式进行启用:

  • 自定义组件.js
Component({
	options: {
		multipleSlots: true	// 在组件定义时的选项中启用多 slot 支持
	}
})
  • 自定义组件.wxml
<view>
  <view>组件内部节点(上)</view>
  <slot name="before"></slot>
  <slot name="after"></slot>
  <view>组件内部节点(下)</view>
</view>
  • index.wxml
<view>这里是index</view>
<test>
  <view slot="before">1111 - 这些文字是插入到组件slot中的</view>
  <view slot="after">2222 - 这些文字是插入到组件slot中的</view>
</test>
  • 运行结果
这里是index
组件内部节点(上)
1111 - 这些文字是插入到组件slot中的
2222 - 这些文字是插入到组件slot中的
组件内部节点(下)

父子组件通信

三种方式:

  • 属性绑定
用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容的数据
  • 事件绑定
用于子组件向父组件传递数据,可以传递任意数据
  • 通过组件实例
父组件还可以通过 this.selectComponent() 获取子组件实例对象
这样就可以直接访问子组件的任意数据和方法

方式一:属性绑定:

父向子传递数据,只能传递普通类型的数据,无法传递方法

// 父组件的 data 节点
data: {
	count: 0
}

// 父组件的 wxml 结构
<test count="{{ count }}"></test>
<view>----</view>
<view>父组件中,count的值为:{{ count }}</view>
// 子组件的 properties 节点
properties:  {
	count: Number
}

// 子组件的 wxml 结构
<text>子组件中,count的值为:{{ count }}</text>

方式二:事件绑定:

事件绑定用于实现子向父传值,可以传递任何类型的数据

// 在父组件中定义 syncCount 方法
// 将来,这个方法会被传递给子组件,供子组件进行调用
syncCount() {
	console.log('syncCount')
}
<!-- 在父组件的 wxml 中 -->
<test count="{{ count }}" bindsync="syncCount"></test>
<!-- 子组件的 wxml 中 -->
<view>子组件中,count的值为:{{ count }}</view>
<button bindtap="addCount">+1</button>
// 子组件的 js 代码
Component({
  // 方法列表
  methods: {
    addCount: {
      this.setData({
        count: this.properties.count + 1
      })
      this.triggerEvent('sync', { value: this.properties.count })
    }
  }
})
// 在父组件的 js 中
syncCount(e) {
	this.setData({
		count: e.detail.value
	})
}

方式三:组件实例:

// wxml 结构
<test count="{{ count }}" bind:sync="syncCount" class="customA" id="cA"></test>
<button bindtap="getChild">获取子组件实例</button>

// js --- 按钮的 tap 事件处理函数
getChild() {
	// 切记下面参数不能传递标签选择器,不然返回的是 null
	const child = this.selectComponent('.customA')			// 也可以传递 id 选择器
	child.setData({ count: child.properties.count + 1 })	// 调用子组件的 setData 方法
	child.addCount()	// 调用子组件的 addCount 方法
}

behavior

基本概念:

  • behaviors 是小程序中,用于实现组件间代码共享的特性
  • 每个 behavior 可以包含一组属性、数据、生命周期函数和方法
  • 组件引用它时,它的属性、数据和方法会被合并到组件中
  • 每个组件可以引用多个 behavior,behavior

如何创建:

在项目根目录下,创建一个 behaviors 文件夹,里面创建 myBehavior.js 文件

// 调用 Behavior() 方法,创建实例对象
// 使用 module.exports 将 behavior 实例对象共享出去
module.exports = Behavior({
    // 属性节点
    properties: {},
    // 私有数据节点
    data: { username: 'zs' },
    // 事件处理函数和自定义方法节点
    methods: {},
    // 其他节点...
}

导入使用:

// 1. 导入 behavior 模块
const myBehavior = require("../../behaviors/myBehavior.js")

Component({
	// 2. 将导入的 behavior 实例对象,挂载到 behaviors 数组节点中,即可生效
	behaviors: [myBehavior],
	
	// 组件的其他节点...
})

behavior 所有可用的节点:

在这里插入图片描述

同名字段的覆盖和组合规则:

官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/behaviors.html

使用 npm 包

支持与限制

目前小程序中已经支持使用 npm 安装第三方包,从而来提高小程序的开发效率,但是,在小程序中使用 npm 包有如下限制:

  • 不支持依赖于 Node.js 内置库的包
  • 不支持依赖于浏览器内置对象的包
  • 不支持依赖于 C++ 插件的包

UI 组件库

基本介绍

Vant Weapp 是一套小程序 UI 组件库,助力开发者快速搭建小程序应用

官网地址:https://vant-contrib.gitee.io/vant-weapp/

安装与使用

教程:https://vant-contrib.gitee.io/vant-weapp/#/quickstart

定制主题

教程:https://vant-contrib.gitee.io/vant-weapp/#/theme

API Promise化

为什么要 Promise 化

默认情况下,小程序官方提供的异步 API 都是基于回调函数实现的,例如,网络请求的 API 需要按照如下的方式调用:

wx.request({
	method: '',
	url: '',
	data: { },
	success: {} => { },		// 请求成功的回调函数
	fail: {} => { },		// 请求失败的回调函数
	complete: {} => { },	// 请求完成的回调函数
})

上面这种方式的缺点:容易造成回调地狱的问题,代码的可读性、维护性较差,而使用 Promise 能有效解决这个问题

什么是 API Promise 化

API Promise 化,指的是通过额外的配置,将官方提供的、基于回调函数的异步 API,升级改造为基于 Promise 的异步 API,从而提高代码的可读性、维护性、避免回调地狱的问题

如何实现 API Promise 化

依赖于 miniprogram-api-promise 第三方包

npm install --save miniprogram-api-promise@1.0.4
// 在小程序入口文件中(app.js),只需要调用一次 promisifyAll() 方法即可实现
import { promisifyAll } from 'miniprogram-api-promise'
const wxp = wx.p = {}
promisifyAll(wx, wxp)

App({
	...
})
// 在小程序页面中使用

// index.wxml
<button bindtap="getInfo">按钮</button>

// index.js
Page({
	async getInfo() {
        // 异步等待数据
		const res = await wx.p.request({
			method: 'GET',
			url: 'https://www.escook.cn/api/get'
			data: {
				name: 'zs',
				age: 20
			}
		})
        // 输出数据
		console.log(res)
	}
})

全局数据共享

基本概念

  • "全局数据共享"又叫做状态管理,是为了解决组件之间数据共享的问题

  • 开发中常用的"全局数据共享"方案有:Vuex、Redux、MobX等

  • 小程序中,可使用 mobx-miniprogram 配合 mobx-miniprogram-bindings 实现全局数据共享

mobx-miniprogram 用来创建 Store 实例对象
mobx-miniprogram-bindings 用来把 Store 中的共享数据或方法,绑定到组件或页面中使用

安装步骤

  • 运行下面命令,安装 MobX 相关的包:
npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1
  • 注意:安装完成后,记得删除 miniprogram_npm 目录后,重新构建 npm

创建 Store 实例

在项目根目录下,新建 store 文件夹,在文件夹中创建一个 store.js 文件:

// 在这个 JS 文件中,专门来创建 Store 的实例对象

// 1. 引入包
import observable from 'mobx-miniprogram'
import action from 'mobx-miniprogram'

// 2. 导出 store
export const store = observable({
	// 数据字段
	numA: 1,
	numB: 2,
	
	// 计算属性
	get sum() {		// get 是一个修饰符,代表只读的意思
		return this.numA + this.numB
	},
	
	// actions 方法,用来修改 store 中的数据
	updateNum1: action(function (step) {
		this.numA += step
	}),
	updateNum2: action(function (step) {
		this.numB += step
	}),
})

页面绑定 Store 成员

// 页面的 .js 文件
import { createStoreBindings } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'

Page({
    // 生命周期函数——监听页面加载
    onLoad: function () {
        this.storeBindings = createStoreBindings(this, {
            store,
            fields: ['numA', 'numB', 'sum'],
            actions: ['updateNum1']
        })
    }
    // 生命周期函数——监听页面卸载
    onUnload: function () {
    	this.storeBindings.destoryStoreBindings()
	}
})

页面使用 Store 成员

// 页面的 .wxml 结构
<view>{{ numA }} + {{ numB }} = {{ sum }}</view>
<button bindtap="btnHandler1" data-setp="{{ 1 }}"> numA + 1</button>
<button bindtap="btnHandler1" data-setp="{{ -1 }}"> numA - 1</button>
// 页面的 .js 结构

// 按钮 tap 事件的处理函数
btnHandler1(e) {
    // 通过 e.target.dataset.setup 可获取 data-setp 中对应的数据
	this.updateNum1(e.target.dataset.setup)
}

组件绑定 Store 成员

import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'

Component({
	store,			// 指定要绑定的 Store
	
	fields: {		// 指定要绑定的字段数据
		numA: () => store.numA,				// 绑定字段的第 1 种方式
		numB: (store) => store.numB,		// 绑定字段的第 2 种方式
		sum: 'sum'							// 绑定字段的第 3 种方式
	},
	
	actions: {		// 指定要绑定的方法
		updateNum2: 'updateNum2'
	}
})

组件使用 Store 成员

// 自定义组件的 .wxml 结构
<view>{{ numA }} + {{ numB }} = {{ sum }}</view>
<button bindtap="btnHandler2" data-step="{{ 1 }}">numB + 1</button>
<button bindtap="btnHandler2" data-step="{{ 1 }}">numB - 1</button>
// 组件的方法列表
method: {
    btnHandler2(e) {
        this.updateNum2(e.target.dataset.step)
    }
}

分包

基础概念

什么是分包:

分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需加载

分包的好处:

  • 可以优化小程序首次启动的下载时间
  • 在多团队共同开发时可以更好的解耦协作

分包之前的项目构成:

在这里插入图片描述

分包之后的项目构成:

在这里插入图片描述

分包的加载规则:

  • 在小程序启动时,默认会下载主包并启动主包内页面(tabBar 页面需要放到主包中)

  • 当用户进入分包内某个页面时,客户端会把对应分包下载下来,下载完成后再进行展示

  • 非 tabBar 页面可以按照功能的不同,划分为不同的分包之后,进行按需下载

分包的体积限制:

  • 整个小程序所有分包大小不能超过 16M(主包 + 所有分包)
  • 单个分包/主包大小不能超过 2 M

使用分包

配置方法:

在这里插入图片描述

在这里插入图片描述

打包原则:

  • 小程序会按照 subpackages 的配置进行分包,subpackages 之外的目录将被打包到主包中
  • 主包也可以有自己的 pages(即最外层的 pages 字段)
  • tabBar 页面必须在主包内
  • 分包之间不能互相嵌套

引用原则:

  • 主包无法引用分包内的私有资源
  • 分包之间不能相互引用私有资源
  • 分包可以引用主包的公共资源

独立分包

概念:独立分包本质上也是分包,只不过它比较特殊,可以独立于主包和其他分包而单独运行

区别:

  • 普通分包必须依赖于主包才能运行
  • 独立分包可以在不下载主包的情况下,独立运行

应用场景:

开发者可以按需将某些具有一定功能独立性的页面配置到独立分包中,因为独立分包不依赖主包即可运行,可以很大程度上提升分包页面的启动速度

注意事项:一个小程序中可以有多个独立分包

配置方法:

在这里插入图片描述

引用原则:

"独立分包"和"普通分包以及主包"之间,是相互隔绝的,不能引用彼此的资源!

分包预下载

基本概念:

分包预下载指的是:在进入小程序的某个页面时,由框架自动预下载可能需要的分包,从而提升进入后续分包页面时的启动速度

预下载分包的行为

相关配置:

使用 preloadRule 节点定义分包的预下载规则

{
	"preloadRule": {	// 分包预下载的规则
		"pages/contact/contact": {		// 触发分包预下载的页面路径
		
			// network 表示在指定的网络模式下进行预下载
			// 可选值为:all(不限网络)和 wifi(仅 wifi 模式下进行预下载)
			// 默认值为:wifi
			
			"network": "all",
			
			// packages 表示进入页面后,预下载哪些分包
			// 可以通过 root 或 name 指定预下载哪些分包
			
			"packages": ["pkgA"]
		}
	}
}

预下载的限制:

预下载的大小限额 2M

在这里插入图片描述

自定义 tabBar

官方教程:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html

gdb对dwarf调试信息的解析和使用 gdb的对dwarf的调试信息的解析到使用的过程分析 阅读详情

相关推荐

HomeAssistant+HACS实战:5分钟搞定米家设备接入(附HomeKit配置技巧)

本文详细介绍了如何通过HomeAssistant和HACS插件商店快速接入米家设备,并分享HomeKit配置技巧。从HACS安装到米家设备接入,再到HomeKit设备集成,提供一站式智能家居解决方案,帮助用户实现设备统一管理和自动化场景设置。

weixin_29192141的博客 1048

微信小程序云开发教程-数据库小白入门

大家好,下面我们将一起学习第五章,《小程序后端接口开发实战》,本章我们面向的学习对象是小程序后端工程师和团队负责人。 通过本章学习,我们输入:“近义词查询”小程序的需求文档和产品原型图,最终可以得到的输出是,可访问的,没有bug的,各个功能模块的后端API接口,以及接口文档,从而方便前端工程师的调用。 这里,我们首先介绍的是关系型数据库。数据库也叫database,一个数据库里面可以新建多个数据表,也就是table,而每个数据表则由多行数据组成,我们称之为row。针对数据表,我们...

软件工程小施同学 的专栏 2195

SAP FB03凭证修改实战:巧用BAPI FI_DOCUMENT_CHANGE更新抬头与行项目

本文详细介绍了SAP FB03凭证修改的实战技巧,重点解析了BAPI FI_DOCUMENT_CHANGE的使用方法。通过该接口,用户可以在不冲销原凭证的情况下直接更新抬头文本(BKTXT)和行项目文本(SGTXT),确保凭证编号连续且符合审计要求。文章包含核心机制解析、完整实现步骤、错误处理方案以及高级应用场景,帮助开发者高效完成SAP财务凭证修改。

weixin_29251567的博客 423

微信小程序-云数据库开发

云数据库

周红伟讲AI 1388

微带线,带状线和接地共面波导的区别

微带线,带状线和接地共面波导的区别

sky_ying的博客 3万+

避坑指南:微信小程序蓝牙广播在iOS上的那些‘坑’(附serviceUuids传值解决方案)

本文深入解析微信小程序蓝牙广播在iOS平台上的开发难点,特别是`serviceUuids`传值解决方案。通过对比iOS与安卓的蓝牙协议实现差异,提供实战编码策略和硬件端配合方案,帮助开发者有效规避兼容性问题,提升蓝牙外围设备开发效率。

weixin_30316097的博客 423

微信小程序——自定义组件

修改

weixin_58963766的博客 395

Unreal5从入门到精通之如何实现移动端触屏滑动手势

随着移动设备的普及,越来越多的游戏和应用选择在移动平台上发布。Unreal Engine 5(UE5)作为一款强大的游戏引擎,提供了丰富的工具和功能,帮助开发者打造出色的移动体验。UE5不仅提升了图形质量,还大幅简化了开发流程,使得开发者能够更专注于游戏设计和用户体验。在移动游戏中,触屏滑动手势是用户与应用互动的主要方式之一。然而,许多开发者在实现这些功能时常常遇到困难。为了填补这一知识空白,本篇文章将详细介绍如何在UE5中实现移动端触屏滑动手势,帮助你从入门到精通,提升你的开发技能。

TxNet 1136

使用fiddler4进行微信小程序抓包

使用fiddler4进行微信小程序抓包 最近在代码里面需要使用微信小程序的接口,首先第一步要获取到小程序的cookie和token。在本文当中使用fiddler4进行抓包 1.下载 链接:https://pan.baidu.com/s/15t16ZgnpenS-y2H7mcz_Og 提取码:cut1 下载完成后自行安装 2.配置 刚安装完毕的fiddler工具只能进对http进行抓包操作,但是现在绝大部分的网站https,因此在抓包之前要对https进行配置。 配置fiddle 进行下列配置,勾选一致下列

qq_37864633的博客 7403

在 SAP BTP ABAP Environment 里把 ATC 跑成流水线:定时检查 + 告警邮件,一次打通

摘要 本文介绍了如何在SAP BTP ABAP环境中实现ATC检查的自动化流程。通过将ATC与质量体系结合,构建从检查到通知的完整闭环:使用Custom Code Analysis Project定义检查范围,通过Application Jobs实现定时调度,利用标准CDS View读取结果,最后开发通知作业发送告警邮件。文章重点阐述了云环境下不同于On-Premise的实现思路,包括Test Variant设计、作业编排模板应用等关键环节,并提供了可落地的代码示例。这种自动化方案能有效解决人工检查的滞后性

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 167

RK3568实现蓝牙音箱功能

A2DP旨在通过蓝牙连接传输高质量的立体声音频流。它使用的基本压缩算法是SBC(Sub-Band Coding)来减小音频数据的大小,同时保持高音质,SBC压缩虽然效率较低,但是是必须支持的基本备用方案。A2DP还支持其他高级编解码器,例如AAC、aptX和LDAC,这些编解码器比SBC提供更好的音质,但这些编解码器的支持取决于设备本身的支持情况。注意A2DP协议要与AVRCP协议区分开。A2DP是传输音频的,而AVRCP是用来控制音频的。这里我用到的是RK3568 Android11。

leikko的博客 1174

基于微信小程序4S店试驾预约平台设计与实现

今天带来的是基于微信小程序4S店试驾预约平台设计与实现,随着移动互联网的快速发展和微信小程序的广泛应用,汽车4S店面临传统营销和服务模式效率低、成本高、客户体验不佳等挑战。为了提升客户体验、增强品牌影响力并优化服务流程,基于微信小程序开发4S店试驾预约平台成为迫切需求。该平台旨在通过便捷的线上预约服务,打破地域限制,提高用户购车前的互动性和满意度,同时帮助4S店精准管理客户、降低运营成本并提升销售业绩。因此,本研究聚焦于微信小程序4S店试驾预约平台的开发与应用,以期为汽车行业数字化转型提供新的解决方案。

qq_15801219的博客 1776

Microsemi Libero系列教程(四)——PLL的使用

文章目录PLL是什么Libero中PLL的使用官方文档 系列教程:Microsemi Libero系列教程 PLL是什么 PLL(Phase Locked Loop): 为锁相回路或锁相环,用来统一整合时钟信号,使高频器件正常工作,如内存的存取资料等。PLL用于振荡器中的反馈技术。 许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步。一般的晶振由于工艺与成本原因,做不到很高的频率...

whik1194的博客 7212

基于微信小程序的4S店试驾平台

摘要:Spring Boot微信小程序4S店试驾平台实现用户在线预约、车辆展示与订单管理功能。系统采用Spring Boot后端框架+MySQL数据库+Redis缓存,前端基于微信小程序开发,集成高德地图API。具备用户管理、车型分类、360度展示、智能预约冲突检测等功能,并提供试驾转化率分析看板。平台优势在于便捷的移动端操作、自动化预约处理、个性化推荐及数据安全保障,有效提升4S店服务效率与用户体验。(字数:148)

2301_81127431的博客 582

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

使Fiddler4抓包微信小程序

1、准备工作 下载Fiddler4进行解压安装 设置端口号 安装证书 查看本机电脑IP地址,得到地址后去模拟器里面随便一个浏览器打开输入:http://xx.xx.xx.xx:8888为模拟器安装证书 打开微信小程序展示完所有页面后再去设置代理,这样保证后面都是网络通畅 ...

qq_36069835的博客 2035

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

springboot基于微信小程序的4S店试驾平台

摘要: 基于微信小程序的4S店试驾平台采用Spring Boot+Uniapp技术栈开发,主要功能包括: 用户端:车辆展示、试驾预约、订单管理、社区交流 管理端:试驾数据统计、门店管理、预约审核 系统采用MySQL存储数据,Redis缓存优化性能,整合微信小程序提供便捷的移动端体验。项目提供完整的源码和数据库,适合作为毕业设计选题参考,具有实际应用价值。效果图展示了小程序界面和后台管理功能,体现了良好的用户体验和完整的管理流程。

qq_1406299528的博客 1027

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

使用Filler4提取微信小程序中的视频

因为需要做防范电信网络诈骗的宣传,但是相关视频网站的内容都不适合宣传使用,最后在微信小程序搜索到一些合适的内容,但是微信小程序的视频不能直接下载,就考虑通过获得文件地址直接下载。 1、机器环境 系统:Windows 7 微信:3.3.5.0, windows桌面版 工具:fillder4 2、Fillder4 设置 Fillder下载地址:https://www.telerik.c...

qingyunyuyu的专栏 1万+

JMeter4.0微信小程序测试步骤指导书:全方位掌握微信小程序测试

JMeter4.0微信小程序测试步骤指导书:全方位掌握微信小程序测试 【下载地址】JMeter4.0微信小程序测试步骤指导书 本项目提供了使用 JMeter 4.0 进行微信小程序测试的全面指南,帮助测试人员快速上手并高效完成测试任务。文档详细介绍了测试环境的搭建、JMeter 4.0 的基本功能、微信小程序测试脚本的编...

gitblog_06739的博客 940

如何用微信小程序实现远程控制4路控制器/断路器

如何用微信小程序实现远程控制4路控制器/断路器呢?本文描述了使用微信小程序调用HTTP接口,实现远程控制4路控制器/断路器,支持4路输出,均可独立控制,可接入各种电器。

tyanzhiqi的专栏 1294

微信小程序商城15天从零实战视频课程-知识点-1行4列的布局

wxml代码 <!--1行4个图片的布局-带文字--> <view class="navs"> <view class="nav-item" > <image src='/images/menu01.png' class="nav-image"/><text >品牌大全</text> </view&g...

杭州.黄老师 520

基于微信小程序的CET-4学习助手平台

本文设计并实现了一款基于微信小程序的CET-4学习助手平台,旨在解决传统四级备考中资源零散、时间碎片化等问题。平台整合词汇、听力、阅读等专项资源,提供系统学习、专项训练、模拟测试等功能,支持学习进度追踪和个性化备考。采用微信小程序原生框架和云开发技术,实现前后端分离架构,确保数据安全与运行流畅。测试表明,平台功能稳定,可有效提升备考效率。未来将拓展AI批改、口语练习等智能功能,并延伸至CET-6等更多英语学习场景。

qq_1744828575的博客 413

PAG 4.1 正式发布:新增支持微信小程序

PAG 4.1 版本新增支持微信小程序,新增支持多个常用 AE 特性,如图层样式-渐变叠加、蒙版-羽化和不透明度、 亮度轨道遮罩/亮度轨道反转遮罩等。经过 2 个多月 6 个版本的迭代,PAG 4.1 版本已经趋于稳定,目前广泛应用于 QQ、小红书等头部 APP,现正式发布,欢迎大家接入使用。

鱼塘鱼汤的专栏 892

不管什么手机,拥有这4个微信小程序就无敌了!

如果你知道微信,还不知道微信小程序就out啦,自从微信小程序跳一跳火了之后,带动了不少小程序的发展,其中,这4个微信小程序非常强大,无需下载,无需安装,搜一搜就能用啦,不管你是什么手机,拥有就无敌了。 1. 最近文档随身 一个分享文档的工具,是我偶然间发现的,可以随时查看、分享最近文档,很方便,是移动办公的好帮手。 2. 大学有答案 一个面向大学生的资源分享平台,它提供300+教材...

佛系软件 749

JMeter 4.0 微信小程序测试步骤指导书

JMeter 4.0 微信小程序测试步骤指导书 【下载地址】JMeter4.0微信小程序测试步骤指导书 本项目提供了使用 JMeter 4.0 进行微信小程序测试的全面指南,帮助测试人员快速上手并高效完成测试任务。文档详细介绍了测试环境的搭建、JMeter 4.0 的基本功能、微信小程序测试脚本的编写方法,以及如何进行压...

gitblog_06752的博客 521

微信小程序分享时,封面图片裁剪为5:4

微信小程序分享时,封面图片裁剪为5:4 直接贴代码: //裁剪分享的图片为5:4 //传入图片地址 cutShareImg:function(imgurl){ let that=this; wx.getImageInfo({ src: imgurl, // 这里填写网络图片路径 success: (res) =&gt; { let c...

KenThomas的博客 1万+

SAP成都研究院大卫哥:SAP C4C中国本地化之微信小程序集成

今天的文章来自Wu David,SAP成都研究院C4C开发团队的架构师,在加入团队之前曾经在SAP上海研究院工作,组内同事习惯亲切地称呼他为大卫哥。 大卫哥身高据Jerry目测有1米8以上,是成都C4C开发团队身高最高的几位男同事之一。身体非常结实,是成都SAP篮球队的成员之一。有一次大卫哥坐在自己座位上,一手撑在桌子上认真地看着向他求助的同事电脑上打印的日志,飞机哥张航拍了一张大卫哥的背影,评价...

weixin_33766168的博客 193
上一篇: 微信小程序-3
下一篇: 有关进程、线程和协程的优质文章推荐
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值