思路:先从缓存中寻找数据或者从服务器中获取数据写入缓存中
优点:减少网络访问次数,提升用户体验
问题:比如原先是不喜欢的在点击喜欢的时候,跳到下一期刊后返回来再次点击会报错。原因是点击不喜欢后服务器端更新了,但加入缓存后返回来的时候期刊依然是缓存中的,所以会出现请求错误。
解决:单独请求获取喜欢的状态,在控件上不使用缓存中的数据
模板字符串
- 作用,增强代码可读性
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>
让对象中的属性直接平铺了出来
将data中的count和state单独提取出来
- 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}}"/>
组件内的jsproperties:{hidden: { type: Boolean}}
组件的wxml<View hidden="{{hidden}}"> ...</View>
wx:if和hidden的区别
wx:if会完整的执行组件的生命周期,而hidden不会。hidden只会控制组件的隐藏和显示。
- 在组件同级目录下面新建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':''}}"/>
业务代码最好写在Model里面
多热合作的时候每个人写自己的Component,最后放到组件目录下调用就可以了
方案一,利用页面做转发