最近10几天都在学习小程序的开发,遇到了一些问题和笔记有趣的东西,今天总结了一下,和大家分享
在一个月黑风高的夜晚,我突然发现一个很有意思的东西,那就是template模块,它可以将你定义的一个HTML5模块包住,然后利用template,在你的小程序任意一个页面使用,这样极大的减少了程序中的复制-粘贴,复制-粘贴(一般用于需要循环使用的界面)。下面就用我自己的一个template模块来讲解下。
在pages里面创建存储你template模块的页面,便于其他页面对其的引用
"pages/index/index", "pages/find/find", "pages/gift/gift", "pages/activity/activity", "pages/common/list",//存储template模块的页面 "pages/white/white"
template模块实例
<template name="job_list"> <view class="br"></view> <navigator url="../white/white" class="page_appmsg"> <view class="page"> <view class="page__hd "> <image class="page__thumb" src="{{image}}" mode="aspectFill"/> <view class="page__hd_title"> <view class="page__hd_title title">{{title}}</view> <view class="page__hd_title school">{{school}}</view> <view class="page__hd_title request"> <text class="page__hd_title pink">{{pink}}</text> <text class="page__hd_title time">{{time}}</text> <view class="page__hd_title cool"><i class="iconfont icon-zan1 active"></i>{{cool}}</view> </view> </view> </view> <view class='page__ft'> <i class="iconfont icon-jian-copy active"></i>{{page__ft}}} </view> </view> </navigator>
在你需要重复使用的html用一个template标签包起来,并给它取个名字 。 (当然了,还有WXSS的编写,这里因为不是很重要我就不放出来了) 完成了这步,你就可以尽情的在你需要这个模板的页面引用这个模块了。
①在你想要引用的界面的WXSS和WXML上引用template的wxml和wxss,
@import '../common/list.wxss'; <import src="../common/list.wxml" />
②在你需要的盒子里面添加template标签,你想要引用那个template模块,就在is里面填哪个模块的名字
<template is="job_list" data="{{jobs}}"/>
如果你是在一个循环里面引用的template就需要改为data="{{...item}}"如:
<block wx:for="{{jobs}}" wx:key="{{index}}"> <template is="job_list" data="{{...item}}"/> </block>
代码:
<import src="../common/list.wxml" /> <view class="swiper-tab"> <view class="swiper-tab-item {{activeIndex==0?'active':''}}" data-current="0" bindtap="clickTab">活动</view> <view class="swiper-tab-item {{activeIndex==1?'active':''}}" data-current="1" bindtap="clickTab">视频</view> <view class="swiper-tab-item {{activeIndex==2?'active':''}}" data-current="2" bindtap="clickTab">直播</view> </view> <swiper current='{{activeIndex}}' bindchange="swiperTab"> <swiper-item> <view class="swiper-item__content"> <block wx:for="{{jobs}}" wx:key="{{index}}"> <template is="job_list" data="{{...item}}"/> </block> </view> </swiper-item> <swiper-item> <view class="swiper-item__content"> <block wx:for="{{jobs}}" wx:key="{{index}}"> <template is="job_list" data="{{...item}}"/> </block> </view> </swiper-item> <swiper-item> <view class="swiper-item__content"> <block wx:for="{{jobs}}" wx:key="{{index}}"> <template is="job_list" data="{{...item}}"/> </block> </view> </swiper-item> </swiper>
效果图:
又是一个月黑风高的夜晚,我在实现点亮的功能的时候,发现我只点了一个地方的点赞,整个页面的点赞都亮了起来,这肯定是不行的,用户明明只对这一个感兴趣,你怎么能全部点亮呢?于是我开始了思考,发现我犯了一个十分愚蠢的问题,那就是没有给我的数据绑定一个值,这就好像没有给喊名字一样:到了饭点你出去大喊一声:儿子,回家吃饭了!结果肯定是家家的儿子都回去吃饭了,然而别人家的饭都还没开始煮呢,你怎么就喊人家回去了呢,你肯定得喊:二狗子,回家吃饭了!别人家的娃才不会也跟着回家。这和点击事件是一个道理的,你必须给你的每项数据绑定一个id,用if语句,将数组遍历一遍,将每个数据的ID拿出来看看,看下你点的这个数据的ID,与数组中哪个相符合。如何成功配对了 ,恭喜,你可以执行点亮操作了! 功能实现如下:
wxml
<a wx:if="{{!item.isSelected}}" id="dianzan1" data-id = "{{item.id}}" bindtap="cool"> <i class="iconfont icon-dianzan1 active"></i> </a> <a wx:if="{{item.isSelected}}" id="dianzan1" data-id = "{{item.id}}" bindtap="cool"> <i class="iconfont icon-dianzan1-copy active"></i> </a>
在数据中,我不仅给了它一个ID,还给了它一个布尔值,并且全部定为false,这样便可以通过 wx:if="{{!item.isSelected}}" wx:if="{{item.isSelected}}" 来判断展示的是点亮与否。
js
cool:function(e) { let jobs = this.data.jobs for(let key in jobs){ // 遍历一遍数据 // console.log(jobs[key].id); //将界面的数据与jobs的数据进行匹配 if (jobs[key].id === e.currentTarget.dataset.id){ if (!jobs[key].isSelected){ //处于未点亮状态时的操作 jobs[key].isSelected = true; wx.showToast({ title: '点赞成功', icon: 'success', duration: 1500, }) }else{ //处于点亮时的操作 jobs[key].isSelected = false; wx.showToast({ title: '取消点赞', icon: 'success', duration: 1500, }) } } } this.setData({ // 将界面更新 jobs : jobs, }); },
效果图
又是一个月黑风高的夜晚,我突然发现了一个bug!在小程序下拉刷新时,我明明只加了一组数据,然而却刷出来了2到3组数据,(这里我使用的是scroll-view组件的bindscrolltolower属性)
吓得我赶紧回去看了一波代码,如下:
lower:function(){ // if(i!=1){ // return // }i++; var that = this; // console.log('下拉加载'); wx.showToast({ title:'加载中', icon:'loading', duration: 1000, }); setTimeout(function(){ wx.showToast({ title:'加载成功', icon:'success', duration:1000, }); wx.request({ url:'http://www.easy-mock.com/mock/5a24075682614c0dc1bf0997/abc/abc', complete:(res)=>{ console.log(that.data.jobs); var jobs = that.data.jobs.concat(res.data.data.jobs) that.setData({ jobs:jobs, }) }, }) },1000);
}, 仔细看看,发现并没有逻辑错误,我思前想后,觉得有可能是函数多次触发导致的,于是我在函数的开始加入 console.log('下拉加载');在调试器中,我发现下拉刷新也是跟着出现了2次,为了更加保险,我在page外定义了一个var i = 1;并在函数外面加上了
if(i!=1){ return }i++;
再次测试,发现只出现了一组数据,由此我确定了这个bug是由于下拉刷新触发过多的原因。但是怎么解决呢,我想了想,觉得可以用一个锁,把这个函数锁起来,等函数执行完毕,在把函数打开。 修改后的函数如下:
data: { jobs:[], windowHeigt:0, pullUpAllow:true, pullLowAllow:true
},
lower:function(){ var that = this; if(that.data.pullLowAllow) { //确定开关的开启与否 that.setData({ pullLowAllow:false //关闭开关 }) console.log('下拉加载'); wx.showToast({ title:'加载中', icon:'loading', duration: 1000, }); setTimeout(function(){ wx.showToast({ title:'加载成功', icon:'success', duration:1000, }); wx.request({ url:'http://www.easy-mock.com/mock/5a24075682614c0dc1bf0997/abc/abc', complete:(res)=>{ console.log(that.data.jobs); var jobs = that.data.jobs.concat(res.data.data.jobs) that.setData({ jobs:jobs, pullLowAllow:true //加载完毕,开启开关 }) }, }) },1000); }
},
结果:
在最后,也把我辛苦Coding了N天的项目展示一下给大家吧 (由于一开始选题的失败,并没有完成什么重要的功能,大家就别说出来了T-T)
2019-03-21 17:28:12 2668
2019-03-21 17:27:07 2949
2019-03-21 17:25:57 3047
2019-03-21 17:24:53 2953
2019-03-21 17:23:46 3022
公司正在筹划上市,为扩大市场占有率,将在近3个月内每日赠送6个免费服务名额。
今日仅剩下2个免费名额
关于微信小程序web-view组件内嵌h5的具体配置流程
目前, 微信 小程序 开发 呈现出 持续火热 的状态 ,越来越多的商家开始关注并开发自己的小程序, 但是,我们也看到,还有一部分的 商家 持观望的态度,不知道是...
微信小程序 对于许多企业的发展是有助力作用的,因此,现在 许多公司在小程序出现已经开始申请自己的账号,一些提前开始运营 微信小程序 的公司已经取得了不错的成绩,...
了解大连的微信公众号代运营价格,花最少钱干最多事
现在, 微信小程序 成为了企业在进行微信营销时又一个有效的方式,许多企业通过 微信小程序 开发的方式建立起微信上的营销覆盖网络,但是,有些企业在开发小程序之后,...
关于微信小程序web-view组件内嵌h5的具体配置流程
目前, 微信 小程序 开发 呈现出 持续火热 的状态 ,越来越多的商家开始关注并开发自己的小程序, 但是,我们也看到,还有一部分的 商家 持观望的态度,不知道是...
微信小程序 对于许多企业的发展是有助力作用的,因此,现在 许多公司在小程序出现已经开始申请自己的账号,一些提前开始运营 微信小程序 的公司已经取得了不错的成绩,...
了解大连的微信公众号代运营价格,花最少钱干最多事
现在, 微信小程序 成为了企业在进行微信营销时又一个有效的方式,许多企业通过 微信小程序 开发的方式建立起微信上的营销覆盖网络,但是,有些企业在开发小程序之后,...
小程序诞生近一年了,很多人在观望,有人把小程序当做下一个蓝海,ALL-IN小程序,有的人觉得小程序鸡肋,完全不想入驻。说穿了,大家最关系的问题是商机,微信小程序...
如果说 微信运营 成为企业营销推广的新渠道的话,那么微信小程序的发展是能抓住消费者心理的新趋势。随着时代的发展,人们的需求在不断的提高,而消费趋势也在不断的变化...
微信小程序并不是很新的概念,经历过一年不断更新改版的小程序,为什么 微信营销 首获红利?速成应用小程序总结出以下几点原因: 1.流量属性:更多场景、更多入口。小...
随着小程序的问世,越来越多的人将精力都花在小程序这一块,让其瞬间成为一个香饽饽,但是从总体来看,小程序其实是一个并不怎么被看好的产品,因为分享途径少,入口比较局...
目前, 微信 小程序 开发 呈现出 持续火热 的状态 ,越来越多的商家开始关注并开发自己的小程序, 但是,我们也看到,还有一部分的 商家 持观望的态度,不知道是...
现在, 微信小程序 成为了企业在进行微信营销时又一个有效的方式,许多企业通过 微信小程序 开发的方式建立起微信上的营销覆盖网络,但是,有些企业在开发小程序之后,...
微信小程序 对于许多企业的发展是有助力作用的,因此,现在 许多公司在小程序出现已经开始申请自己的账号,一些提前开始运营 微信小程序 的公司已经取得了不错的成绩,...
许多然错过了微信公众号的红利,那么在面对 微信小程序 的红利是,就不能错过了。对于传统企业来说, 微信小程序 可以成为他们转型升级的有一条道路,同时,目前处于小...
微信 小程序 成为最近比较热门的一个 话题 ,特别是 随着小程序各方面能力的不断提升 , 越来越多的企业希望通过开发小程序来弥补微信公众号在营销推广方面的不足,...
微信小程序 在上线之初就收获了无数的目光,而随着 微信小程序 的不断更新,企业可以开发的微信小程序的功能也得到了增加,用户也可以得到更好的使用体验,因此,可以预...