草庐IT

【微信小程序】收藏功能的实现(条件渲染、交互反馈)

颜颜yan_ 2023-04-03 原文

🏆今日学习目标:第十九期——收藏功能的实现(条件渲染、交互反馈)
😃创作者:颜颜yan_
✨个人主页:颜颜yan_的个人主页
⏰预计时间:35分钟
🎉专栏系列:我的第一个微信小程序


文章目录


前言

哈喽大家好,本期是微信小程序专栏第十九期。本期主要内容收藏功能的实现(条件渲染、交互反馈)。
每期内容是连载呢,建议大家可以看看往期内容,更好理解噢~


前期准备

这一部分包括页面数据data.js和页面的结构。data.js放在文章末尾了噢~

wxml

wxml页面部分比较简单,添加一个view容器,命名为tool。然后添加三个小view,分别表示点赞、评论、收藏。每个小view中包括图片和数量,即image和text标签。每个功能按钮都绑定了对应的点击事件,即catchtap属性。除此之外,每个功能按钮绑定当前文章的id号。

<!-- 收藏、评论、点赞、计数等功能 -->
<view class="tool">
<!-- 点赞 -->
    <view class="tool-item" catchtap="onUpTap" data-post-id="{{post.postId}}">
    <image src="/images/icon/wx_app_like.png"></image>
    <text>{{post.upNum}}</text>
    </view>
    <!-- 评论 -->
    <view class="tool-item comment" catchtap="onCommentTap" data-post-id="{{post.postId}}">
    <image src="/images/icon/wx_app_message.png"></image>
    <text>{{post.commentNum}}</text>
    </view>
    <!-- 收藏 -->
    <view class="tool-item" catchtap="onCollectionTap" data-post-id="{{post.postId}}">
    <image src="/images/icon/wx_app_collect.png"></image>
    <text>{{post.collectionNum}}</text>
    </view>
</view>

wxss

添加wxss后,保存代码,效果图如下:

.tool{
    height: 65rpx;
    text-align: center;
    line-height: 65rpx;
    margin: 20rpx 28rpx 20rpx 0;
}
.tool-item{
    display: inline-block;
    vertical-align: top;
    margin-right: 30rpx;
}
.tool-item image{
    height: 30rpx;
    width: 30rpx;
    vertical-align: -3px;
    margin-right: 10rpx;
}

文章收藏功能

条件渲染(wx:if与wx:else)

wx:if与wx:else可以实现条件渲染。当变量为true时,执行wx:if,否则将执行wx:else。这个思路类似于js中的if else。
wx:if可以被单独使用,并不一定要和wx:else一起使用

接下来,我们用一个小例子来理解wx:if和wx:else。如果变量length的取值大于4,则显示数字1,否则显示数字0。

<view wx:if="{{length>4}}">1</view>
<view wx:else>0</view>

条件渲染也可以实现多级的if else。如下,如果变量length的取值大于4,则显示数字0;如果变量length的取值大于1且小于等于4,则显示数字1,否则显示数字2。

<view wx:if="{{length>4}}">0</view>
<view wx:elif="{{length>1}}">1</view>
<view wx:else>2</view>

收藏图标切换

思路: 判断自己是否收藏了文章。如果自己收藏了,就需要将收藏的图标更换为已收藏的图标。

在data.js中,我们使用collectionStatus属性表示文章是否被收藏,这个变量的类型时布尔类型。当collectionStatus为ture时,显示已收藏图标,否则显示未收藏图标。如下,使用条件渲染就可以很轻松地实现啦~


wx:if与wx:else的条件渲染不仅仅可以用来做图片的更换,还可以用控制元素与的显示和隐藏

收藏点击功能

实现当用户点击收藏图标时,对文章进行收藏和取消收藏。

首先在数据库操作类方法中添加updatePostData方法,用来更新本地的点赞等信息。
思路:

  1. 定义变量获取当前文章的id和所有文章的id。
  2. 使用swich case处理收藏。使用if else进行判断,如果当前状态是未收藏,则将收藏总量增加,collectionStatus设置为true;如果当前状态是收藏,则将收藏总量减少,collectionStatus设置为false。注意:swich是选择语句,不是循环语句,这里的break用来跳出swich。也可以使用if,但如果后续添加其他功能,使用嵌套的if语句层数多,导致程序冗长,可读性下降。所以面对多分支选择,使用swich更好。
  3. 更新缓存数据库。使用同步接口来更新数据库,即execSetStorageSync。
  4. 添加collect()方法调用updatePostData方法。
  5. 编写处理文章收藏动作的事件函数onCollectionTap,首先在wxml中进行注册,然后编写js方法。
 //DBPost.js
 // 收藏文章
    collect(){
        return this.updatePostData('collect');
    }
    // 更新本地的点赞、评论信息、收藏、阅读量
    updatePostData(category){
        var itemData = this.getPostItemById(),
        postData = itemData.data,
        allPostData = this.getAllPostData();
        switch(category){
            case 'collect':
                // 处理收藏,如果当前状态是未收藏,则增加数量,否则减少数量。
                if(!postData.collectionStatus){
                    // 当前状态是未收藏
                    postData.collectionNum++;
                    postData.collectionStatus = true;
                }else{
                    // 当前状态是收藏
                    postData.collectionNum--;
                    postData.collectionStatus = false; 
                }
                break;
            default:
                break;
        }
        // 更新缓存数据库
        allPostData[itemData.index] = postData;
        this.execSetStorageSync(allPostData);
        return postData;
    }



效果图如下:

交互反馈(wx:showToast)

现在,我们已经实现了文章的收藏与取消功能,但用户在收藏和取消收藏后没有任何交互反馈提示。

小程序提供了四种交互反馈API:

  • wx.showToast
  • wx.hideToast
  • wx.showModal
  • wx.showActionSheet

接下来,我们使用wx:showToast(object)来制作文章收藏功能的交互反馈。如下:

  1. 使用title属性设置提醒消息的内容;
  2. 使用duration设置提醒的自动消失时间,默认值是1500毫秒;
  3. 使用icon设置一个小图标,取值只能是success和loading;
  4. 使用mask指定是否显示透明的蒙层,防止触摸穿透,默认值是false。

    效果图如下:

data.js

var postList = [{
    date:"Nov 9 2022",
    title:"那个不为人知的故事",
    postImg:"/images/post/unknow-story.jpg",
    avatar:"/images/avatar/avatar-5.png",
    content:"超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软。这是杨昭和陈铭生的故事,这是卧底缉毒警察的故事。 你始终不曾离去,你永远在我心底。",
    readingNum:10989,
    collectionNum:1867,
    commentNum:999,
    author:"无量渡口",
    dateTime:"2020年10月",
    detail:"杨昭是一名古董修复师,过着奢侈却封闭的生活。陈铭生是卧底缉毒警察,在一次任务中失去了一条腿后,隐姓埋名来到杨昭所在的城市做了出租车司机。意外的相遇让两个“不般配”的人走到了一起,他们的感情没有杂质,不在乎任何世俗标准、社会地位甚至身体残缺,只有纯粹的彼此。他们不畏世俗的眼光,以为会勇敢而安然地共度下半辈子,直到陈铭生接到新的任务。在陈铭生接到新的任务之后,他们的生活发生了变化。",
    postId:1,
    music:{
        url:"https://music.163.com/#/song?id=2001297075&market=baiduqk",
        title:"那个不为人知的故事",
        coverImg:"https://p2.music.126.net/BjNwhCRpsb3sd_FPqSkpyQ==/109951167550604611.jpg?param=130y130"
    },
    collectionStatus:true,
    upStatus:false,
    upNum:11,
    comments:[
        {
            username:"qingshi",
            avator:"/images/avatar/avatar-5.png",
            create_time:'1234545',
            content:{
                txt:'超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软',
                img:["/images/avatar/avatar-5.png","/images/avatar/avatar-3.png"],
                audio:null
            }
        },{
            username:"hehe",
            avator:"/images/avatar/avatar-5.png",
            create_time:'1234545',
            content:{
                txt:'超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软',
                img:["/images/avatar/avatar-5.png","/images/avatar/avatar-3.png"],
                audio:{url:"http://123",timeLen:8}
            }
        }
    ]
},
{
    date:"Nov 10 2022",
    title:"边城",
    postImg:"/images/post/biancheng.jpg",
    avatar:"/images/avatar/avatar-2.png",
    content:"沈从文代表作之一,重现湘西世界的诗意与纯净,书写人情美、人事美、人性美",
    readingNum:9999,
    collectionNum:8766,
    commentNum:886,
    author:"沈从文",
    dateTime:"1934年4月",
    detail:"《边城》成书于1934年4月,那正是沈从文爱情事业双丰收的季节。1931年社会虽然动荡不安,但总体上还是稍显和平,这个时候中国有良知的文人,都在思考着人性的本质,沈从文自然是走在前沿的,于是,他希望通过自己对湘西的印象,描写了一个近似于桃花源的湘西小城,给都市文明中迷茫的人性指一条明路。人间尚有纯洁自然的爱,人生需要皈依自然的本性。",
    postId:2,
    music:{
        url:"https://music.163.com/#/song?id=1383022165",
        title:"等等等等",
        coverImg:"https://p2.music.126.net/UVppy_qTp0HM4WRFP9cxcw==/109951164277036447.jpg?param=130y130"
    },
    collectionStatus:true,
    upStatus:false,
    upNum:11,
    comments:[
        {
            username:"qingshi",
            avator:"/images/avatar/avatar-5.png",
            create_time:'1234545',
            content:{
                txt:'超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软',
                img:["/images/avatar/avatar-5.png","/images/avatar/avatar-3.png"],
                audio:null
            }
        },{
            username:"hehe",
            avator:"/images/avatar/avatar-5.png",
            create_time:'1234545',
            content:{
                txt:'超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软',
                img:["/images/avatar/avatar-5.png","/images/avatar/avatar-3.png"],
                audio:{url:"http://123",timeLen:8}
            }
        }
    ]
},
{
    date:"Nov 11 2022",
    title:"活着",
    postImg:"/images/post/alive.jpg",
    avatar:"/images/avatar/avatar-3.png",
    content:"《活着》讲述了人如何去承受巨大的苦难;讲述了眼泪的宽广和丰富;讲述了绝望的不存在;讲述了人是为了活着本身而活着的,而不是为了活着之外的任何事物而活着。",
    readingNum:1234,
    collectionNum:5676,
    commentNum:890,
    author:"余华",
    dateTime:"1992年12月",
    detail:"《活着》是当代作家余华的代表作,讲述了一个人历尽世间沧桑和磨难的一生,亦将中国大半个世纪的社会变迁凝缩其间。《活着》还讲述了眼泪的宽广和丰富;讲述了绝望的不存在;讲述了人是为了活着本身而活着的,而不是为了活着之外的任何事物而活着。《活着》出版25年来打动了无数读者,经过时间的沉淀,已成为20世纪中国文学当之无愧的经典之作。到今天,已被译介至英、法、德、意、日、韩、俄等30多个国家和地区,获得国内外多个文学大奖,余华也凭借这部作品于2004年获得法兰西艺术和骑士文化勋章。",
    postId:3,
    music:{
        url:"https://music.163.com/#/song?id=1438059520&market=baiduqk",
        title:"To Live",
        coverImg:"https://p1.music.126.net/nnvavnnYB81exIMtpvAyRQ==/109951164876062278.jpg?param=130y130"
    },
    collectionStatus:true,
    upStatus:false,
    upNum:11,
    comments:[
        {
            username:"qingshi",
            avator:"/images/avatar/avatar-5.png",
            create_time:'1234545',
            content:{
                txt:'超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软',
                img:["/images/avatar/avatar-5.png","/images/avatar/avatar-3.png"],
                audio:null
            }
        },{
            username:"hehe",
            avator:"/images/avatar/avatar-5.png",
            create_time:'1234545',
            content:{
                txt:'超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软',
                img:["/images/avatar/avatar-5.png","/images/avatar/avatar-3.png"],
                audio:{url:"http://123",timeLen:8}
            }
        }
    ]
},
{
    date:"Nov 12 2022",
    title:"哈利波特百科全书",
    postImg:"/images/post/harry.jpg",
    avatar:"/images/avatar/avatar-4.png",
    content:"手里没有哈利波特百科全书 ,怎么能称得上真正的哈迷!涵盖哈利·波特全系列内容,配全新精美素描插图、哈利波特魔法世界历史年表。",
    readingNum:789,
    collectionNum:906,
    commentNum:345,
    author:"哈利·波特百科全书编委会",
    dateTime:"2007年10月",
    detail:"本书全面展示、生动再现了JK罗琳建构的魔法世界。书中对所有词条均有全面、生动、详细的解读。对于巫师的出身、经历、性格、姓名的由来以及该人物与希腊神话、罗马神话、圣经故事的隐密关联等,都有详细的解释;对于怪异难懂的魔法、咒语、绰号、俗语等,都从拉丁语、英语、法语、德语等语源的角度做出了合理的阐释。这是本书的核心部分,是“哈迷”全面了解魔法世界、深度阅读小说,以及进行相关研究的重要参考书。",
    postId:4,
    music:{
        url:"https://music.163.com/#/song?id=1350064264&market=baiduqk",
        title:"Harry Potter Theme",
        coverImg:"https://img1.kuwo.cn/star/albumcover/500/26/29/2268976275.jpg"
    },
    collectionStatus:true,
    upStatus:false,
    upNum:11,
    comments:[
        {
            username:"qingshi",
            avator:"/images/avatar/avatar-5.png",
            create_time:'1234545',
            content:{
                txt:'超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软',
                img:["/images/avatar/avatar-5.png","/images/avatar/avatar-3.png"],
                audio:null
            }
        },{
            username:"hehe",
            avator:"/images/avatar/avatar-5.png",
            create_time:'1234545',
            content:{
                txt:'超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软',
                img:["/images/avatar/avatar-5.png","/images/avatar/avatar-3.png"],
                audio:{url:"http://123",timeLen:8}
            }
        }
    ]
},
{
    date:"Nov 19 2022",
    title:"三体:全三册",
    postImg:"/images/post/santi.jpg",
    avatar:"/images/avatar/avatar-5.png",
    content:"《三体》第73届世界科幻雨果奖获奖作品,银河奖特别奖,《三体3》轨迹奖长篇科幻小说!2017年世界雨果奖提名作品。",
    readingNum:99,
    collectionNum:8766,
    commentNum:89,
    author:"刘慈欣",
    dateTime:"2006年5月",
    detail:"《三体》是刘慈欣创作的长篇科幻小说系列,由《三体》《三体2:黑暗森林》《三体3:死神永生》组成,第一部于2006年5月起在《科幻世界》杂志上连载,第二部于2008年5月首次出版,第三部则于2010年11月出版。作品讲述了地球人类文明和三体文明的信息交流、生死搏杀及两个文明在宇宙中的兴衰历程。",
    postId:5,
    music:{
        url:"https://y.qq.com/n/ryqq/player",
        title:"三体-黑暗森林",
        coverImg:"https://y.qq.com/music/photo_new/T002R300x300M000004KqWDO3A8LDU_1.jpg?max_age=2592000"
    },
    collectionStatus:true,
    upStatus:false,
    upNum:11,
    comments:[
        {
            username:"qingshi",
            avator:"/images/avatar/avatar-5.png",
            create_time:'1234545',
            content:{
                txt:'超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软',
                img:["/images/avatar/avatar-5.png","/images/avatar/avatar-3.png"],
                audio:null
            }
        },{
            username:"hehe",
            avator:"/images/avatar/avatar-5.png",
            create_time:'1234545',
            content:{
                txt:'超人气作者Twentine(无量渡口)经典之作,直击心底深处的柔软',
                img:["/images/avatar/avatar-5.png","/images/avatar/avatar-3.png"],
                audio:{url:"http://123",timeLen:8}
            }
        }
    ]
}
]

// 添加接口,向外部暴露模块
module.exports = {
    postList: postList
}

总结

以上就是今天的学习内容啦~
如果有兴趣的话可以订阅专栏,持续更新呢~
咱们下期再见~

有关【微信小程序】收藏功能的实现(条件渲染、交互反馈)的更多相关文章

  1. ruby-on-rails - 建模收藏夹 - 2

    我希望将Favorite模型添加到我的User和Link模型。业务逻辑用户可以有多个链接(即可以添加多个链接)用户可以收藏多个链接(他们自己的或其他用户的)一个链接可以被多个用户收藏,但只有一个所有者我对如何为这种关联建模以及在模型就位后如何创建用户收藏夹感到困惑?classUser 最佳答案 下面的数据模型怎么样:classUser:destroyhas_many:favorite_links,:through=>:favorites,:source=>:linkendclassLink:destroyhas_many:favor

  2. ruby-on-rails - 如何在 ruby​​ 交互式 shell 中有多行? - 2

    这可能是个愚蠢的问题。但是,我是一个新手......你怎么能在交互式ruby​​shell中有多行代码?好像你只能有一条长线。按回车键运行代码。无论如何我可以在不运行代码的情况下跳到下一行吗?再次抱歉,如果这是一个愚蠢的问题。谢谢。 最佳答案 这是一个例子:2.1.2:053>a=1=>12.1.2:054>b=2=>22.1.2:055>a+b=>32.1.2:056>ifa>b#Thecode‘if..."startsthedefinitionoftheconditionalstatement.2.1.2:057?>puts"f

  3. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  4. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  5. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  6. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  7. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  8. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

  9. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  10. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

随机推荐