加入缓存提升用户体验

思路:先从缓存中寻找数据或者从服务器中获取数据写入缓存中

优点:减少网络访问次数,提升用户体验

解决缓存带来的问题

问题:比如原先是不喜欢的在点击喜欢的时候,跳到下一期刊后返回来再次点击会报错。原因是点击不喜欢后服务器端更新了,但加入缓存后返回来的时候期刊依然是缓存中的,所以会出现请求错误。

解决:单独请求获取喜欢的状态,在控件上不使用缓存中的数据

ES6模板字符串和扩展运算符的应用

模板字符串

  • 作用,增强代码可读性
console.log(a+'456');//代码可读性不强
console.log(`${a}456`);//可读性更强

扩展运算符

  • 作用,可以有效减少wxml中对象的使用,比如
  • 缺点,可读性不太好,有些时候不知道对象中有些什么数据
//原先的写法
this.setData({
classic: res
})
//扩展运算符写法
this.setData({
classic: ...res//res是从服务端获取的数据
})
在wxml中
//原先的写法
<Text>{{classic.id}}</Text>
//之后的写法
<Text>{{id}}</Text>

让对象中的属性直接平铺了出来

独立更新like组件的状态

将data中的count和state单独提取出来

让自定义组件支持hidden

  • wx:if条件语法
<v-music wx:if='{{false}}'/>
<v-essay wx:if='{{false}}'/>
<v-movie wx:if='{{true}}'/>
  • 组件的hidden属性,但是hidden只会作用于小程序自身的组件,对自定义组件无效。所以我们可以通过传值来达到这样的效果
page页面的wxml
<v-music hidden="{{fasle}}"/>
组件内的js
properties:{
hidden: {
type: Boolean
}
}
组件的wxml
<View hidden="{{hidden}}">
...
</View>

wx:if和hidden的区别

wx:if会完整的执行组件的生命周期,而hidden不会。hidden只会控制组件的隐藏和显示。

解决wxss在组件间的复用问题

  • 在组件同级目录下面新建common.wxss文件
  • 将共同wxss代码复制到common.wxss文件中
  • 在组件的wxss中引用
@import "../common.wxss";

音乐组件的具体实现

  • 老版实现方式
  • 新版实现方式
    • 实现点击后图片状态切换,同时音频响起
    • 当当前音乐出于播放状态的时候,切换不同期刊后切回来,音乐继续播放同时界面上显示的是要暂停的图标
    • 代码优化
组件的wxml代码
<image bind:tap="onPlay" src="{{playing?playSrc:pauseSrc}}" title="{{classic.title}}"/>
组件的js代码
const mMgr = wx.getBackgroundAudioManager();
properties: {
src: {
title: String
type: String
}
}
data: {
...
}
attached: function(){
//恢复状态
this._recoverStatus();
//监听音乐播放
this._monitorSwitch();
},
//detached: {
// mMgr.stop();
//}
method:{
onPlay: function(e){
if(!this.data.playing){
//图片切换
this.setData({
paying: true
})
//音乐播放
mMgr.src = this.properties.src;
mMsgr.title = this.properties.title;
}else{
//图片切换
this.setData({
paying: false
})
//音乐停止
mMgr.pause();
}
},
//让后台播放器与界面图标同步
_monitorSwitch: function(){
mMgr.onPlay(()=>{
this._recoverStatus();
})
mMgr.onPause(() => {
this._recoverStatus();
})
mMgr.onStop(() => {
this._recoverStatus();
})
mMgr.onEnded(() => {
this._recoverStatus();
})
},
//恢复状态
_recoverStatus: function () {
if (mMgr.paused) {
this.setData({
playing: false
})
return;
}
if (mMgr.src === this.properties.src) {
this.setData({
playing: true
})
}
},
}

实现音乐控件的旋转效果

动画API

CSS3的canvas

//css3动画实现,在组件的wxss里添加这段代码
.rotation {
-webkit-transform: rotate(360deg);
animation: rotation 12s linear infinite;
-moz-animation: rotation 12s linear infinite;
-webkit-animation: rotation 12s linear infinite;
-o-animation: rotation 12s linear infinite;
} @-webkit-keyframes rotation {
from {
-webkit-transform: rotate(0deg);
}
to {
-webkit-transform: rotate(360deg);
}
}
//在组件的wxml添加样式
<image src="..." class="{{playing?'rotation':''}}"/>

对Component和Model应用的理解

业务代码最好写在Model里面

多热合作的时候每个人写自己的Component,最后放到组件目录下调用就可以了

组件通信

方案一,利用页面做转发

最新文章

  1. Linux创建WiFi热点
  2. 【BZOJ-3156】防御准备 DP + 斜率优化
  3. 关于COOKIE学习的一二
  4. DOM-based xss
  5. Calling / Running a report in Oracle forms 10g / 11g
  6. PhpStorm 注册码
  7. android4.0 的图库Gallery2代码分析(四) 之相册的数据处理以及显示
  8. 联发科Helio P90(mt6779),P70(mt6775),P60(MT6771),P35,P22(MT6762)芯片参数规格
  9. 剑指offer面试题16:反转链表
  10. State management(状态管理)
  11. ABAP 文件选择框
  12. java字符串池和字符串堆内存分配
  13. windows系统显示隐藏文件以及显示文件扩展名
  14. Nginx反向代理2--配置文件配置
  15. WebLogic使用总结(二)——WebLogic卸载
  16. Maven pom.xml中的元素modules、parent、properties以及import(转)
  17. Multi-cloud Kubernetes with Triton
  18. pyinstall 把你的程序变成windows的可执行程序。py exe UPX
  19. 写个简单的chrome插件-京东商品历史价格查询
  20. 10-Linux与windows文件互传-pscp坑---- &#39;pscp&#39; 不是内部或外部命令,也不是可运行的程序或批处理文件

热门文章

  1. python全栈学习笔记(三)网络基础之网络设备及架构介绍
  2. Linux中redis的安装与配置
  3. WAKE-WIN10-SOFT-环境
  4. HDU ACM 2895-Edit distance
  5. ZT Factory Pattern
  6. multiGet(下载软件)
  7. ASN.1详解
  8. Linux修改权限命令chmod用法详解
  9. hdu1579 Function Run Fun(深搜+记忆化)
  10. 【[AHOI2009]中国象棋】