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

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

实现的功能

不同页面间的数据绑定

随机显示数组里的元素

实时显示系统的日期

鼠标点击和页面跳转等基本功能

swiper组件和template样式模板的使用

使用easy mock模拟后台数据并进行动态传参

项目展示

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

完美邂逅~

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

下面简单介绍一下filter~

filter华丽登场~

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

filter的三要素

数组对象(arry)

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

具体用法: arry.filter();

回调函数(callbackfn)

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

具体用法: function callbackfn(value, index, array);

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

返回值

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

别样的惊喜~

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

敲黑板的重点来啦!!!

在 dairy.wxml 页面中用 navigator 组件实现 ‘每日一看’ 页面和 ‘阅读详情’ 页的跳转,并传递一个 id 参数,每篇文章都有唯一的一个 id,这样就可以通过 js 使用 filter 过滤器筛选出两个 id 相等的文章数据,也就实现了数据的动态绑定。

阅读

在 dairy.js 中,因为页面每次都是随机显示一篇文章,这时就需要获取该文章的id,并作为参数,当页面跳转时作为一个钩子把两个页面联系起来。

that.setData({

headline: arr[index].headline,

from: arr[index].from,

// 设置id作为阅读详情页的一个钩子

id: arr[index].acticle_id

})

}

})当页面跳转到详情页时,在 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的数组赋值给datas

var datas = res.data.data.acticle_List.filter(item => {

return item.acticle_id == params.id;

});

that.setData({

item: datas

});

console.log(datas);

}

})

}

})在 detail.wxml 中对传入的 item 数据进行调用,于是别样的惊喜就出现啦~

{{item[0].headline}}

作者:@{{item[0].author}}

{{item[0].content}}

特别注意: 可能有细心的人儿已经发现为什么这里用的是 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就解决啦~

每日一看

看看世界

情报局

简介

4. 页面左右滑动的效果

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

5. template 模板样式的使用

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

template 模板的定义:

{{author}}分享于

{{share_time}}

{{content}}

template 模板的调用:

我有话要说~

开发的过程中难免会出现各种各样的bug,记得一定要百度,百度,百度呀!!!这是个独立思考的过程,对能力的提高也非常有帮助~做这个项目最大的心得便是看太多不如干一场,肯定会干货满满,收获满满哟~

这个小程序后续还会完善,感兴趣的可以持续关注哟(^U^)ノ~

一波安利~

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

微信小程序 过滤html,当微信小程序遇上filter~(示例代码)相关推荐

  1. 当微信小程序遇上filter~

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

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

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

  3. uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级详细教程

    前言 关于 uni-app 项目中接入微信授权登录的文章鱼龙混杂,各种乱代码.过时.没注释.不讲流程原理,非常难用. 本文实现了 uni-app H5 移动端网页项目,实现微信授权登录功能,详细讲解接 ...

  4. java查看附近门店_微信公众号获取用户地理位置并列出附近的门店的示例代码...

    思路分析: 1.在微信公众号内获取用户地理位置 需要js-sdk签名包(关于如何获取文档有介绍) 2.根据获取的地理位置ajax去后台请求,通过sql语句,查询中距离最近的门店(sql语句在网上搜的, ...

  5. python创建小火龙角色_当《火影忍者》遇上《宝可梦》,佐助化身小火龙,他变成了皮卡丘?...

    说起<火影忍者>这部动漫作品大家都很熟悉,其中的很多角色都是非常有个人特点的.无论是主角漩涡鸣人,还是宇智波佐助和卡卡西等角色.每个角色都有自己独特的风格,你有没有想过当<火影忍者& ...

  6. python创建小火龙角色_当《火影忍者》遇上《宝可梦》,佐助化身小火龙,他变成了皮卡丘...

    说起<火影忍者>这部动漫作品大家都很熟悉,其中的很多角色都是非常有个人特点的.无论是主角漩涡鸣人,还是宇智波佐助和卡卡西等角色.每个角色都有自己独特的风格,你有没有想过当<火影忍者& ...

  7. php做网站步骤_PHP网站安装程序制作的原理、步骤、注意事项和示例代码

    其实PHP程序的安装原理无非就是将数据库结构和内容导入到相应的数据库中,从这个过程中重新配置连接数据库的参数和文件,为了保证不被别人恶意使用安装文件,当安装完成后需要修改安装文件. 1.制作PHP安装 ...

  8. 企业微信回调服务器python,微信企业号开发:开启回调模式/Python判断信息-回复指定内容示例代码...

    1 注册微信企业号的步骤就省略了.很简单. 选择下面的应用中心,企业小助手,选择回调模式. 选择随机生成token AESKEY.地址输入你的服务器地址. 选择设置,新建管理组,然后就能看到COPID ...

  9. linux小菜鸟入门,《Linux菜鸟入门》初识linux基础(示例代码)

    初识linux 一  进入系统 1.用户 普通用户 : student 密码: student 超级用户 : 点击 not listed username :root   password: redh ...

最新文章

  1. ASP Win7旗舰版中的IIS配置asp.net的运行环境
  2. edtext 从右边开始输入 安卓_Android开发之EditText属性详解
  3. nmon结果分析工具_Nmon实时监控并生成HTML监控报告
  4. Codeforces Round #374 (Div. 2) A. One-dimensional Japanese Crosswor 水题
  5. python虚拟cpu性能_python实现可视化动态CPU性能监控
  6. OpenStack管理界面开源啦!
  7. 公司转型微服务,真的有必要吗?
  8. ionic中定义路由的问题
  9. WIndows10下 MySQL 5.7(社区版)安装
  10. NYOJ463 - 九九乘法表
  11. java课程设计实验报告_《java课程设计实验报告.doc
  12. GIS软件开发入门需要学习哪些内容?
  13. python调用函数出现未定义_在python中调用函数时出错“函数未定义”
  14. 微信支付——后台对接
  15. RAR解压、压缩命令
  16. SpringBoot + Spring Cloud +Vue 管理系统前端搭建(二、visual studio code开发前端项目
  17. python白名单验证是什么意思_luminati python+selenium使用方式(白名单和账号密码验证方式)...
  18. VSCode+Marp:用Markdown做幻灯片-宋森安(基础篇)
  19. 仿生学导论学习笔记——第四章
  20. 基于深度学习的几何模型表示 分析与合成

热门文章

  1. java农场商城 生鲜超市 水果蔬菜电商网站平台系统设计与实现 项目源代码下载 javaweb jsp ssm mysql
  2. 最小生成树克鲁斯卡尔算法
  3. 智慧树源码_智慧树源码系统开发
  4. Win10运行内存容易满的问题(如何真正关机)
  5. 通用格式HDMap --- 测绘学报50卷--通用化高精地图数据模型
  6. VR时代的游戏“涉赌”困境
  7. 图解数据结构:栈和队列
  8. android手机两年变卡,安卓手机为什么用到两到三年以后就会开始变卡?
  9. 如何将PDF中的黑色字体改成红色
  10. nodejs+vue+elementui游戏新闻资讯网站管理系统