小程序入门与实战

本文详细介绍了在微信小程序中如何为文章组件添加点赞和收藏功能,包括使用wxml和wxss进行界面设计,通过js处理点击事件,以及利用setData方法更新内存数据并刷新界面的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述

给组件添加点击事件

属性解析
if-else条件
<!--pages/post-detail/post-detail.wxml-->
<view class="container">
  <image class="head_image" src="{{post.postImg}}"></image>
  <text class="title">{{post.title}}</text>
  <view class="author-date">
    <view class="avatar_box">
      <image class="avatar" src="{{post.avatar}}"></image>
      <text class="author">{{post.author}}</text>
    </view>
    <text class="date">{{post.dateTime}}</text>
  </view>
  <text class="detail">{{post.detail}}</text>
  <view class="tool">
    <view class="tool-item" catchtap="onUpTab" data-post-id="{{post.postId}}">
      <image wx:if="{{post.upStatus}}"       src="/images/icon/wx_app_liked.png"></image>
      <image wx:else src="/images/icon/wx_app_like.png"></image>
      <text class="count">{{post.upNum}}</text>
    </view>
    <view class="tool-item comment">
      <image src="/images/icon/wx_app_message.png"></image>
      <text class="count">{{post.commentNum}}</text>
    </view>
    <view class="tool-item" catchtap="onCollectionTab" data-post-id="{{post.postId}}">
      <image wx:if="{{post.collectionStatus}}" src="/images/icon/wx_app_collected.png"></image>
      <image wx:else src="/images/icon/wx_app_collect.png"></image>
      <text class="count">{{post.collectionNum}}</text>
    </view>
  </view>
</view>

处理点击事件

属性解析
upDatePostData更新内存数据
setData刷新局部界面
showToast交互反馈提示
duration提醒自动消失事件
icon小图标
mask是否显示透明蒙层
// pages/post-detail/post-detail.js
import {
  DBPost
} from '../../db/DBPost.js'
Page({

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

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    var postId = options.id;
    this.dbPost = new DBPost(postId);
    this.postData = this.dbPost.getPostItemById().data;
    this.setData({
      post: this.postData
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {
    wx.setNavigationBarTitle({
      title: this.postData.title,
    })
  },
  onCollectionTab: function(event) {
    var newPostData = this.dbPost.upDatePostData('collect');
    this.setData({
      'post.collectionStatus': newPostData.collectionStatus,
      'post.collectionNum': newPostData.collectionNum
    })
    wx.showToast({
      title: newPostData.collectionStatus ? "收藏成功" : "取消收藏",
      duration: 1000,
      icon: "success",
      mask: true
    })
  },
  onUpTab:function(event){
    console.log("up");
    var newPostData = this.dbPost.upDatePostData('up');
    this.setData({
      'post.upStatus': newPostData.upStatus,
      'post.upNum': newPostData.upNum,
    })
  
  },

})

更新内存数据

属性解析
switch-case条件语句
class DBPost {
  constructor(postId) {
    this.postId = postId;
    this.storageKeyName = 'postList';
  }
  getAllPostData() {
    var res = wx.getStorageSync(this.storageKeyName);
    if (!res) {
      res = require('../data/data.js').postList;
    }
    return res;
  }
  //获取指定id号的文章数据
  getPostItemById() {
    var postData = this.getAllPostData();
    var len = postData.length;
    for (var i = 0; i < len; i++) {
      if (this.postId == postData[i].postId) {
        return {
          //文章数组的下标
          index: i,
          data: postData[i]
        }
      }
    }
  }
  upDatePostData(category) {
    var postDatas = this.getAllPostData();
    var itemData = this.getPostItemById();
    var postData = itemData.data;
    switch (category) {
      //处理收藏
      case "collect":
        //已收藏 点击收藏取消收藏
        if (postData.collectionStatus) {
          postData.collectionNum--;
          postData.collectionStatus = false;
        } else {
          console.log('加');
          postData.collectionNum++;
          postData.collectionStatus = true;
        }
        break;
        //处理点赞
      case 'up':
        if (postData.upStatus) {
          postData.upNum--;
          postData.upStatus = false;
        } else {
          postData.upNum++;
          postData.upStatus = true;
        }
        break;
      default:
        break;

    }
    postDatas[itemData.index] = postData;
    this.execSetStorageSync(postDatas);
    return postData;
  }
  //同步存储数据
  execSetStorageSync(data) {
    wx.setStorageSync(this.storageKeyName, data);
  }
}

export {
  DBPost
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值