在微信小程序的开发过程中,当你想要实现不同页面间的数据绑定,却为此抓耳饶腮时,不妨让微信小程序与filter 来一场完美的邂逅,相信会给你带来别样的惊喜~

前段时间被安利了一个很实用的公众号—前端早读课,它简洁、大方的页面和方便、实用的功能深深地吸引着我~(^U^)ノ 恰好这段时间学了小程序,就自己仿着写了个前端早读课的小程序。

实现的功能

  • 不同页面间的数据绑定
  • 随机显示数组里的元素
  • 实时显示系统的日期
  • 鼠标点击和页面跳转等基本功能
  • swiper组件和template样式模板的使用
  • 使用easy mock模拟后台数据并进行动态传参

项目展示

整个项目包括“每日一看”、“看看世界”、“情报局”和“介绍”四个主页面。

完美邂逅~

在开发“每日一看”页面的过程中,我遇到了一个难题,如何将“每日一看”页面中获取的数据与阅读详情页的数据绑定起来,也就是从这时起,微信小程序开始邂逅filter~

下面简单介绍一下filter~

filter华丽登场~

filter 是一个基于数组的方法,通过一个回调函数对数组进行筛选,并返回数组中满足条件的元素,相当于过滤器的效果。

filter的三要素

  1. 数组对象(arry)

    每个filter 方法都有一个数组对象,通过该方法对数组里的元素进行筛选。

     具体用法: arry.filter();
    复制代码
  2. 回调函数(callbackfn)

    对于数组中的每个元素,filter 方法都会调用callbackfn 函数一次。

     具体用法: function callbackfn(value, index, array);
    复制代码

    其中 value 表示数组元素的值,index 表示数组元素的下标, array 表示包含该元素的数组。

  3. 返回值

    filter 方法的返回值是一个数组,包含所有满足回调函数条件的值。

更多详情: filter文档

别样的惊喜~

filter的骚操作—实现数据的动态绑定

敲黑板的重点来啦!!!

  1. dairy.wxml 页面中用 navigator 组件实现 ‘每日一看’ 页面和 ‘阅读详情’ 页的跳转,并传递一个 id 参数,每篇文章都有唯一的一个 id,这样就可以通过 js 使用 filter 过滤器筛选出两个 id 相等的文章数据,也就实现了数据的动态绑定。
<navigator url="./detail/detail?id={{id}}"><button class="page_bd_motto_read">阅读</button>
</navigator>
复制代码
  1. dairy.js 中,因为页面每次都是随机显示一篇文章,这时就需要获取该文章的id,并作为参数,当页面跳转时作为一个钩子把两个页面联系起来。
that.setData({headline: arr[index].headline,from: arr[index].from,// 设置id作为阅读详情页的一个钩子id: arr[index].acticle_id})}})
复制代码
  1. 当页面跳转到详情页时,在 detail.js 中使用 filter 把 acticle_id 等于上一页面文章 id 的数据赋值给 datas,再对其进行操作,就实现了数据的动态绑定。
Page({data: {// 表示该篇文章item: []},onLoad: function(params) {// 检验id是否传递成功console.log(params.id);var that = this;wx.request({url: 'https://www.easy-mock.com/mock/5a2b5f76158e7b70032804d0/getActicleInfo/getActicleInfo',success: function(res) {// 使用过滤器把id等于上一页面id的数组赋值给datasvar datas = res.data.data.acticle_List.filter(item => {return item.acticle_id == params.id;});that.setData({item: datas});console.log(datas);}})}
})
复制代码
  1. detail.wxml 中对传入的 item 数据进行调用,于是别样的惊喜就出现啦~
<!--pages/dairy/detail/detail.wxml--><view class="page__hd"><view class="page__hd_title center">{{item[0].headline}}</view><view class="page__hd_author">作者:@{{item[0].author}}</view></view><view class="page__bd"><text class="page__bd_content center">{{item[0].content}}</text></view>复制代码

特别注意: 可能有细心的人儿已经发现为什么这里用的是 item[0]. 来调用,而不是 **item.**来调用,这是数据索引的问题。如下图所示,我的数据是个三级结构,item 表示的是最外层的文章数组元素,要获取文章的作者或标题等信息,必须使用 item[0]. 才能进行调用。只有理解数据索引的本质,才能准确地调用数据。

于是,小程序在遇上filter后,就创造出了别样的惊喜 O(∩_∩)O~

一起排坑~

在开发过程中,遇到了一些坑,在此总结一下~

1. 随机显示数组里的元素

这个公众号一大亮点就是可以随机显示文章,每次点进去的文章都不一样,感受度极佳。这里采用随机函数来获取数组的下标,Math.random()函数是获取[0,1)之间的数,Math.floor()函数是向下取整,这样就可以随机获取相应的下标数。

 onLoad: function () {var that = this;wx.request({url: 'https://www.easy-mock.com/mock/5a2b5f76158e7b70032804d0/getActicleInfo/getActicleInfo',method: 'GET',data: {},success: function(res) {//获取文章数据的列表var arr = res.data.data.acticle_List;//用随机函数随机获取数组的下标var index = Math.floor(Math.random()*arr.length);// console.log(arr[index].acticle_id);that.setData({headline: arr[index].headline,from: arr[index].from,// 设置id作为阅读详情页的一个钩子id: arr[index].acticle_id})}})},
})
复制代码

2. 实时显示系统的日期

之前开发的时候觉得这个方法如果自己写还蛮难的,后面百度了一下,发现js里面提供了相应的API,直接使用就好,特别方便。有关系统时间的API

  //监听页面显示// day:星期几// date:某日// month:月份onShow: function () {var myDate = new Date();// setData设置或更新数据this.setData({date: myDate.getDate(),month: myDate.getMonth() + 1,day: week(),});function week(day) {switch(myDate.getDay()) {case 1: day="星期一"; break;case 2: day="星期二"; break;case 3: day="星期三"; break;case 4: day="星期四"; break;case 5: day="星期五"; break;case 6: day="星期六"; break;default: day="星期天";}return day;}},
复制代码

3. 用hover实现鼠标点击效果

在对首页进行鼠标点击效果的开发过程中,一开始想到的就是使用伪元素来添加点击按钮的样式效果,后面出现了一个bug,当我点击按钮跳转到另一个页面,再回退到原页面时,还是处于点击态的样式,这时百度就起了很大的作用,我上网百度了很久,才发现有hover属性中的hover-stay-time为动画持续的时间,hover-class 为定义点击按钮时的样式,于是这个bug就解决啦~

<view class="page__bd"><view class="page__bd_tab" hover-class="active" hover-stay-time="2000"><view class="page__bd_tab_item" hover-class="active1" hover-stay-time="2000" bindtap="dairyRead">每日一看</view><view class="page__bd_tab_item" hover-class="active1" hover-stay-time="2000" bindtap="lookWorld">看看世界</view><view class="page__bd_tab_item" hover-class="active1" hover-stay-time="2000" bindtap="intelligence">情报局</view><view class="page__bd_tab_item" hover-class="active1" hover-stay-time="2000" bindtap="introduction">简介</view></view></view>
复制代码

4. 页面左右滑动的效果

使用swiper组件实现对页面的左右滑动的效果。

5. template 模板样式的使用

当一串代码面临复制粘贴时,这时就应该考虑对其进行封装,这样直接在不同的地方调用就好了,也完成了代码的优化。小程序中的 template 模板就很好地帮我们解决了这个问题,并通过 is 属性来实现调用。

  • template 模板的定义:
<!--pages/common/list_intelligence/list_intelligence.wxml-->
<template name = "intelligence_list"><view class="page__cell"><view class="page__cell_headline center"><view class="page__cell_headline_img"><image src="{{avatar}}"/></view><view class="page__cell_headline_author">{{author}}分享于</view><view class="page__cell_headline_time">{{share_time}}</view></view><view class="page__cell_detail center">{{content}}</view></view>
</template>复制代码
  • template 模板的调用:
  <view class="page__bd"><block wx:for="{{intelligence_list}}" wx:key="{{index}}" center ><template is="intelligence_list" data="{{...item}}"></template></block></view>复制代码

我有话要说~

  1. 开发的过程中难免会出现各种各样的bug,记得一定要百度,百度,百度呀!!!这是个独立思考的过程,对能力的提高也非常有帮助~做这个项目最大的心得便是看太多不如干一场,肯定会干货满满,收获满满哟~
  2. 这个小程序后续还会完善,感兴趣的可以持续关注哟(^U^)ノ~

一波安利~

  • 微信小程序开发教程手册

  • 微信小程序官方开发文档

  • 使用 easy-mock 构造后台虚拟数据

  • 使用微信开发者工具进行开发

最后献上 github地址 里面有源代码,若是喜欢,希望大家给个star 鼓励一下啦~ღ( ´・ᴗ・` )比心

当微信小程序遇上filter~相关推荐

  1. 微信小程序 php毛玻璃,当微信小程序遇上filter~

    在微信小程序的开发过程中,当你想要实现不同页面间的数据绑定,却为此抓耳饶腮时,不妨让微信小程序与filter 来一场完美的邂逅,相信会给你带来别样的惊喜~ 前段时间被安利了一个很实用的公众号-前端早读 ...

  2. 微信小程序 过滤html,当微信小程序遇上filter~(示例代码)

    在微信小程序的开发过程中,当你想要实现不同页面间的数据绑定,却为此抓耳饶腮时,不妨让微信小程序与filter 来一场完美的邂逅,相信会给你带来别样的惊喜~ 前段时间被安利了一个很实用的公众号-前端早读 ...

  3. 当微信小程序遇上TensorFlow:Server端实现补充

    在前面一篇文章<当微信小程序遇上TensorFlow:Server端实现>中,我们探讨了微信小程序server端的实现.今天在调试微信小程序时才发现一个问题,那就是:微信小程序要求HTTP ...

  4. mpython掌控板_用mpython x玩转掌控板——微信小程序 遇上掌控板

    [情境导入] 掌控板可以通过便捷的wifi连接网络方式或无线AP功能与其他软件联通,在理解前面课程内容的基础上,这节课我们一起来了解一下如何运用微信小程序通过OneNET网络平台与掌控板物联,制作一个 ...

  5. 微信小程序图片上传九宫格拖拽组件

    微信小程序图片上传&九宫格拖拽组件 前言 图片上传加九宫格拖拽是一个比较常用的组件,常用于发帖或者评论等内容上传模块,我这篇九宫格拖拽的思路是借鉴了一款优雅的小程序拖拽排序组件实现这篇文章 实 ...

  6. [vue] vue和微信小程序写法上有什么区别?

    [vue] vue和微信小程序写法上有什么区别?写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别. 一.生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下 ...

  7. 上传声音 微信小程序_SpringBoot开发案例之微信小程序录音上传

    前言 书接上回的<SpringBoot开发案例之微信小程序文件上传>,正常的业务流程是,口语测评需要学生通过前端微信小程序录入一段音频,通过调用第三方音频处理服务商进行评分,然后服务端对原 ...

  8. 微信小程序获取上一页路由 获取从哪个页面跳转进来的

    微信小程序获取上一页路由 获取从哪个页面跳转进来的 var pages = getCurrentPages(); let prevpage = pages[pages.length - 2];//上一 ...

  9. 微信小程序上传接口php,微信小程序API 上传、下载

    微信小程序API 上传.下载 wx.uploadFile(OBJECT) 将本地资源上传到开发者服务器.如页面通过 wx.chooseImage 等接口获取到一个本地资源的临时文件路径后,可通过此接口 ...

最新文章

  1. 1.8 Remove
  2. python从入门到实践笔记_Python编程从入门到实践二至七章笔记
  3. PHP学习之八:执行运算符与字符加一
  4. GIS配准和配准算法基本概念学习
  5. kettle kafka mysql_kettle使用kafka组件消费数据,保存到资源库无法打开问题
  6. Git 之四 分支管理
  7. 系统架构设计师考试4
  8. mysql 命令 kill_MySQL之死锁检测
  9. 全局变量定义的时候左侧加了static_c语言中static 用法
  10. 微信电影影视小程序系统源码
  11. 【Python】利用MD5文件去重
  12. 汇编(三):DEBUG
  13. 罗辑回归,Logistic Regression(or sigmoid function)
  14. 计算机里的文档怎么设置密码,文件夹怎么设置密码,教您如何给电脑上文件夹设置密码...
  15. 强势Mac机网站设计软件:10大最佳HTML编辑器
  16. 图书系统(查询图书内容)
  17. 习题4-10 猴子吃桃问题
  18. 生活小窍门:枸杞泡水喝应该注意的三件事
  19. 注册表与盘符(转victor888文章 )
  20. 美国国家信用合作社管理局(NCUA)发布RFI询问信用合作社加密相关问题

热门文章

  1. #110-【我也不知道这是什么鬼算法】Ska Piggy Banks
  2. openwrt patch文件怎么用_openwrt patch
  3. c语言中a lt b a b是什么意思,C语言中c=ab?a:b是什么意思
  4. Python计算机视觉编程第一章 基本的图像操作与处理
  5. 基于Java毕业设计学习自律养成小程序后台源码+系统+mysql+lw文档+部署软件
  6. 最常用的三角函数值和三角变形公式
  7. python打开图片的几种方法
  8. 区块链中对于NFT与数字藏品的市场应用
  9. 2019杭电多校第七场 HDU - 6656 Kejin Player 期望
  10. 银行可视化大屏后端计算案例