1、分享朋友、朋友圈
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
wx.showShareMenu({
withShareTicket: true,
menus: ['shareAppMessage', 'shareTimeline'],
})
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
return {
title: 'title',
imageUrl: '../../images/xcht_share.png',
path: `pages/custoTts/custoTts?selectFeelingInfo=${encodeURIComponent(JSON.stringify(selectFeelingInfo))}` // 注:这边传值obj
}
},
/**
* 用户点击右上角分享朋友圈-目前安卓适用,ios不支持
*/
onShareTimeline() {
return {
title: 'title',
imageUrl: '../../images/xcht_share.png',
query: `selectFeelingInfo=${encodeURIComponent(JSON.stringify(selectFeelingInfo))}`
}
},
2、分享链接url带参过长处理
// encodeURIComponent(JSON.stringify(obj))为跳转url时的转换方法 (见上1)
// JSON.parse(decodeURIComponent(options.obj))为接收参数页面的转换方法
onLoad(options) {
let selectFeelingInfo = JSON.parse(decodeURIComponent(options.selectFeelingInfo))
}
3、先后顺序
async composeCommit() {
let canPlay = await this.isCanPlay(this.data.selectFeelingInfo.defaultDemoSentence)
if(canPlay == true) return
// 执行下面程序,如果不写 promise async await 就会优先执行下面内容
},
isCanPlay(word) {
return new Promise((resolve, reject) => {
wx.request({
url: `接口url`,
method: 'GET',
success(res) {
if(res.statusCode === 200) {
resolve(res)
} else {
reject(res)
}
},
fail(res) {
reject(res)
}
})
})
},
4、关于音频播放这件事
const innerAudioContext = wx.createInnerAudioContext()
/**
* 播放
*/
composeCommit() {
innerAudioContext.src = '......' // 声音地址类似于mp3
innerAudioContext.play() // 播放
innerAudioContext.onEnded(() => { // 监听音频自然播放至结束的事件
_this.falseIsPlay()
})
innerAudioContext.onStop(() => { // 监听音频停止事件
_this.falseIsPlay()
})
innerAudioContext.onPlay(() => { // 监听音频播放事件
_this.setData({
isPlaying: true
})
})
}
/**
* 停止播放
*/
stopPlay() {
innerAudioContext.stop()
innerAudioContext.src = ''
},
5、下载上传复制
/**
* 下载
*/
downFileMpga() {
const _this = this
wx.downloadFile({
url: `//下载得接口`,
success(res) {
if(res.statusCode === 200) {
wx.uploadFile({
filePath: res.tempFilePath, // 将下载得文件地址写入
name: 'file',
url: `//上传文件的接口`,
header: {
'Content-Type': 'multipart/form-data'
},
formData: {
file: JSON.stringify(res.tempFilePath)
},
success(res) {
let messageData = JSON.parse(res.data)
if(res.statusCode === 200) {
wx.setClipboardData({ // 将内容复制下来
data: messageData.data,
success(res) {
// success
}
})
} else {
// fail
}
},
fail(res) {
console.log(res)
},
complete(res) {
console.log(res)
}
})
} else {
//
}
},
complete(res) {
console.log(res)
}
})
},
6、小程序实现watch
const watch = require('../../utils/watch')
onLoad: function (options) {
watch.setWatcher(this) // 设置监听器,建议在onLoad下调用
},
watch: {},
//watch.js
/**
* 设置监听器 watch.js
*/
export function setWatcher(page) {
let data = page.data;
let watch = page.watch;
Object.keys(watch).forEach(v => {
let key = v.split('.'); // 将watch中的属性以'.'切分成数组
let nowData = data; // 将data赋值给nowData
for (let i = 0; i < key.length - 1; i++) { // 遍历key数组的元素,除了最后一个!
nowData = nowData[key[i]]; // 将nowData指向它的key属性对象
}
let lastKey = key[key.length - 1];
// 假设key==='my.name',此时nowData===data['my']===data.my,lastKey==='name'
let watchFun = watch[v].handler || watch[v]; // 兼容带handler和不带handler的两种写法
let deep = watch[v].deep; // 若未设置deep,则为undefine
observe(nowData, lastKey, watchFun, deep, page); // 监听nowData对象的lastKey
})
}
/**
* 监听属性 并执行监听函数
*/
function observe(obj, key, watchFun, deep, page) {
var val = obj[key];
// 判断deep是true 且 val不能为空 且 typeof val==='object'(数组内数值变化也需要深度监听)
if (deep && val != null && typeof val === 'object') {
Object.keys(val).forEach(childKey => { // 遍历val对象下的每一个key
observe(val, childKey, watchFun, deep, page); // 递归调用监听函数
})
}
let that = this;
Object.defineProperty(obj, key, {
configurable: true,
enumerable: true,
set: function (value) {
watchFun.call(page, value, val); // value是新值,val是旧值
val = value;
if (deep) { // 若是深度监听,重新监听该对象,以便监听其属性。
observe(obj, key, watchFun, deep, page);
}
},
get: function () {
return val;
}
})
}
module.exports = {
setWatcher: setWatcher
}
7、微信小程序父组件像子组件传值,子组件改变父组件的值
//父组件
json中引入组件
{
"usingComponents": {
"shareTip": "../../../components/shareTip/shareTip"
}
}
wxml中
// 子组件触发"closePopup"事件,调用"onClosePopup"方法 注意固定写法:bind + 事件 = on + 固定事件
<shareTip showPop="{{showPop}}" bindclosePopup="onClosePopup"/>
js中
data: {
showPop: true
},
onClosePopup(e) {
console.log("eeeee", e.detail)
}
子组件
json
"component": true,
js
Component({
properties: {
showPop: {
type: Boolean
}
},
methods: {
closePopup() {
console.log("closePopup")
//触发父组件的方法triggerEvent,注意固定写法: this.triggerEvent('事件名', 传递值)
this.triggerEvent('closePopup', 'ddddd')
},
}
})
wxml中
<view bindtap="closePopup"></view>
8、父组件执行子组件事件
<shareTip id="shareTip" showPop="{{showPop}}" bindclosePopup="onClosePopup"/>
// closePopup子组件函数
this.selectComponent('#shareTip').closePopup()
https://jiangsihan.cn/archives/xcx-nx