第六、七章构建文章详情页面与.缓存机制与异步API的async和await

1.构建文章详情页面

1.先构建文章骨架

<view class="container">
<image src></image>

<view>
  <image></image>
  <text></text>
  <text>发表于</text>
  <text></text>
</view>

<view>
  <text></text>
</view>
<view>
  <image></image>
  <image></image>
</view>
<text></text>
</view>

2.填写内容

<view class="container">
<image src="/images/2.jpg"></image>

<view>
  <image src="/images/my/8.jpg"></image>
  <text>九月</text>
  <text>发表于</text>
  <text>12小时前</text>
</view>

<view>
  <text>哈利波特</text>
</view>
<view>
  <image src="/images/icon/share.png"></image>
  <image src="/images/icon/collection.png"></image>
</view>
<text>常规赛事结束之后</text>
</view>

3.样式

.container{
  display: flex;
  flex-direction: column;
}
.head-image{
  width: 100%;
  height: 460rpx;
}
.author-date{
  display: flex;
  flex-direction: row;
  align-items: center;
  margin-top: 20rpx;
  margin-left: 30rpx;
}
.avatar{
  width: 64rpx;
  height: 64rpx;
}
.avatar{
  width: 64rpx;
  height: 64rpx;
}
.author{
  font-size: 24rpx;
  color: #999;
  margin-left: 20rpx;
}

.const-text{
  font-size: 24rpx;
  margin-left: 30rpx;
  color: #999;
}
.date{
  font-size: 24rpx;
  margin-left: 30rpx;
  color: #999;
}
.title{
  margin-left: 40rpx;
  font-size: 36rpx;
  font-weight: 700;
  margin-top: 30rpx;
  letter-spacing: 2px;
  color: #4b556c;
}
.tool{
  display: flex;
  /* 方向是哪个方向 哪个就是主轴 */
  flex-direction: column;
  /* 设置子元素在交叉轴上面的分布 */
  align-items: center;
  /* 垂直居中 */
  justify-content: center;

}
.cricle{
  display: flex;
  /* 相当于给容器设设置一个宽度 它才能向右靠 */
  width: 660rpx;
  flex-direction: row;
  justify-content: flex-end;
}
.horizon{
  width: 660rpx;
  height: 1px;
  background-color: #e5e5e5;
  /* 脱离文档流  */
  position: absolute;
  /* z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。 */
  z-index: -99;
}
.cricle image{
  width: 90rpx;
  height: 90rpx;
}
.share-img{
  margin-left:30rpx;
}
.detail{
  color: #666;
  margin-left: 30rpx;
  margin-top: 20rpx;
  margin-right: 30rpx;
  line-height: 44rpx;
  letter-spacing: 2px;
}

在这里插入图片描述
4自定义属性 data-

5.在页面的onLoad函数
绑定id

<view data-post-id="{{item.postId}}" bind:tap="onGoToDetail" class="post-container">

post.js:

onGoToDetail(event){
    //事件对象
    //页面与页面间数据通信
    console.log(event)
    const pid=event.currentTarget.dataset.postId
    wx.navigateTo({
      url: '/pages/post-detail/post-detail?pid='+pid
    })

detail.js:拿到了当前文章的id号

onLoad: function (options) {
    console.log(options)

  },

6.加载详情数据并填充页面

//导入
import{postList} from '../../data/data.js'
Page({

  /**
   * 页面的初始数据
   */
  data: {
    postData:{}

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    console.log(options)
    const postData=postList[options.pid]
    console.log(postData)
    this.setData({
      postData
    })

  },
<view class="container">
<image class="head-image" src="{{postData. headImgSrc}}"></image>

<view class="author-date">
  <image class="avatar" src="{{postData.avatar}}"></image>
  <text class="{{postData.author}}">九月</text>
  <text class="const-text">发表于</text>
  <text class="date">{{postData.dateTime}}</text>
</view>


  <text class="title">{{postData.title}}</text>

<view class="tool">
  <view class="cricle">
    <image class="" src="/images/icon/collection.png"></image>
  <image class="share-img" src="/images/icon/share.png"></image>
  
  </view>
  <view class="horizon"></view>
</view>

<text class="detail">{{postData.detail}}</text>
</view>

2.缓存机制与异步API的async和await

app.js
1.app.js中保存全局变量

App({
    onLaunch(){
        console.log("小程序启动")
    },
    test:1
});
  
const app=getApp()
console.log(app.test)

在这里插入图片描述
2.小程序缓存的增删查改与清除

 wx.setStorageSync('flag', true)
    wx.setStorageSync('flag', false)
    wx.setStorageSync('flag1', 7)
    //清空缓存
    //wx.clearStorageSync()
    //wx.removeStorageSync('flag')
    const flag=wx.getStorageSync('flag1')
    console.log(flag)

在这里插入图片描述
在这里插入图片描述
3.异步函数的几个方案:回调函数、promise与await

  async onLoad(options) {
   wx.setStorageSync('flag', 1)
   const flag=await wx.getStorage({
    key: 'flag',
   // success(value){
   // console.log(value.data)
 flag.then((value)=>{
      console.log(value)
    })

4.js的动态属性

  onCollect(event){
const postsCollected={}
    postsCollected[this.data._pid]=true
    wx.setStorageSync('posts_collected', postsCollected)
    //动态访问属性
    const obj={
      flag:1
    }
    obj.flag=2
    //obj[attr]=2

  },

5.收藏未收藏的切换

data: {
   // postData:{},
    //表明当前文章是否被收藏  默认值为false
    collected:false,
  //  _pid:null

  },
//onCollect(event){
    //假设当前文章未收藏->收藏
    //哪篇文章被收藏
    //数据结构 多篇文章是否被收藏
    //const postsCollected={}
   // postsCollected[this.data._pid]=true
    this.data.collected=true
    this.setData({
      collected:this.data.collected
    })
   // wx.setStorageSync('posts_collected', postsCollected)
    
  },

在这里插入图片描述
在这里插入图片描述
6.初始化收藏状态

onLoad: function (options) {
   
    const postData=postList[options.pid]
    this.data._pid=options.pid
    //定义变量  从缓存中取
    const postsCollected=wx.getStorageSync('posts_collected')
    //当前文章的状态
    const collected=postsCollected[this.data._pid]
    console.log(collected)
    console.log(postsCollected)
    this.setData({
      postData,
      collected
    })

7.缓存如何不被覆盖

 data: {
    //做数据绑定 加上_不做数据绑定
    postData:{},
    //表明当前文章是否被收藏  默认值为false
    collected:false,
    _pid:null,
    _postsCollected:{}

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
   
    const postData=postList[options.pid]
    this.data._pid=options.pid
    //定义变量  从缓存中取
    const postsCollected=wx.getStorageSync('posts_collected')
    this.data._postsCollected=postsCollected
    //当前文章的状态
    let collected=postsCollected[this.data._pid]
    if(collected===undefined){
      //如果是undefind 说明文章从来没有被收藏过
      collected=false
    }
    console.log(collected)
   
    this.setData({
      postData,
      collected
    })

  },
  onCollect(event){
    //假设当前文章未收藏->收藏
    //哪篇文章被收藏
    //数据结构 多篇文章是否被收藏
    //读取缓存里的postsCollected
    const postsCollected=this.data._postsCollected
    wx.getStorageSync('key')
    postsCollected[this.data._pid]=!this.data.collected
    //this.data.collected=true
    this.setData({
      collected:!this.data.collected
    })
    wx.setStorageSync('posts_collected', postsCollected)
    
  },

8.showToast接口的应用

wx.showToast({
      title: '收藏成功',
      //停留多长时间
      duration:5000
    })

在这里插入图片描述
9.showModal

//轻提示
    //模态对话框
  //  const result=await wx.showModal({
  //     title:'是否收藏文章',
      // success(res){
      //   console.log(res)
      // }
     
    // })
  },

10.showActionSheet

 async onShare(event){
      const result=await wx.showActionSheet({
        itemList:['分享到QQ','分享到微信','分享到']
      
      // itemList:['分享到QQ','分享到微信','分享到'],
      // success(res){
      //   console.log(res)
     // }
    })
    console.log(result)
  },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值