当前位置: 首页 > 编程日记 > 正文

小程序这件事 撸起袖子加油干

写在前面的话:

初次接触小程序,便被它开发的简易与便捷所吸引。总按耐不住对未知的探索欲望,于是乎撸起袖子来干一个吧。附:小程序开发文档

项目介绍

艺龙酒店小程序实践

  • 使用<swiper>标签实现网页轮播图的效果,同时可以内嵌一些跳转美观而不失实用。
  • 首页界面绑定,四个tabbar,点击更换样式并进入不同的查询界面。
    <block>中进行wx:for循环得到四个界面的文字和图片,同时为每个tabbar绑定一个id值进行区分,在三元运算符中绑定的id与js中data中创建的currentTab进行比较,值相等则为盒子添加一个active类,在wxss中提前设置active的区别样式,就可以实现点击切换到不同的样式,同时给下面的时间地点选择界面绑定一个与tabbar对应的id,实现上下界面绑定,最后用同样的方法设置下面界面的区别样式。

<view class="swiper-tab"><block wx:for="{{tabbars}}" wx:key="index"><view class="swiper-tab-item {{currentTab == item.currentTab?'active':''}}" data-currentTab="{{item.currentTab}}" bindtap="clickTab"><image src="{{currentTab==item.currentTab?item.hoverimage:item.image}}" /><text>{{item.text}}</text></view></block></view>
复制代码
  • 利用腾讯地图API对位置信息进行操作,通过wx.setStoragewx.getStorage实现数据本地缓存。
    点击目的地进入目的地选择界面(参考代码),然后给每一个城市名添加一个bindtap事件,当城市名被点击时将城市名通过setStorage存入本地缓存,然后通过wx.navigateBack跳回(跳转问题坑多多还需要好好理解可参考脱坑)选择界面并在选择界面的data中添加一个city数据通过wx.getStorage得到城市信息并通过this.setData将信息绑定到首页(选择时间界面同理实现不再赘述),在首页点击“我的位置”就会调用wx.getLocation方法获取当地的位置信息并覆盖city的值(使用地图API前要先引入腾讯地图引入地图与使用参考文档)。
//城市选择界面点击城市
cityTap(e) {const val = e.currentTarget.dataset.val || '',types = e.currentTarget.dataset.types || '',Index = e.currentTarget.dataset.index || '',that = this;let city = this.data.citySel;switch (types) {case 'locate'://定位内容city = this.data.locateCity;break;case 'national'://全国city = '全国';break;case 'new'://热门城市city = val;break;case 'list'://城市列表city = val.cityName;break;}if (city) {wx.setStorage({key: 'city',data: city})} else {console.log('还没有获取城市名');this.getLocate();}setTimeout(() => {wx.navigateBack({delta: 1, // 回退前 delta(默认为1) 页面})}, 1000);},//首页获取缓存中城市名onShow(e) {var that = this;wx.getStorage({key: 'city',success: function(res){let city = res.data;that.setData({city})},fail: function(res) {that.getLocation();}}) ;},//获取定位getLocation: function(e) {var that = this;wx.getLocation({type: 'wgs84', // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标success: function (res) {//2、根据坐标获取当前位置名称,显示在顶部:腾讯地图逆地址解析qqmapsdk.reverseGeocoder({location: {latitude: res.latitude,longitude: res.longitude},success: function (res) {// console.log(res)            var address = res.result.formatted_addresses.recommend;that.setData({city:address})}})}})},
复制代码
  • 点击查询酒店进入酒店详情页并进行搜索
    首先在input框上面绑定bindinput事件获取输入值,然后利用地图APIgetSuggestion()方法获得提示的值,再将值进行筛选判断数据的category属性是否为宾馆酒店,如果是则用一个新数组存放酒店列表值(没有酒店信息的API,暂时只想到这个拙略的方法,所以酒店图片都是相同的),最后将获得的酒店信息驱动到酒店列表界面。
//获取输入值
searchInput(e) {const searchInput = e.detail.value;this.setData({searchInput})},//将输入得到的结果显示到界面search(e) {const searchInput = this.data.searchInput;const city = this.data.city;var that = this;demo.getSuggestion({region: city,keyword: searchInput + '酒店',region_fix: 1,plicy: 0,success: (res) => {wx.setStorage({key: 'hotelList',data: res.data,})let hotelArr = []for (let i = 0; i < res.data.length; i++) {if (res.data[i].category.indexOf('酒店宾馆') != -1) {res.data[i].category = res.data[i].category.slice(5);res.data[i].address = res.data[i].address.slice(10);hotelArr.push(res.data[i])}}that.setData({hotelList: hotelArr})}})},
复制代码
  • 筛选列表的制作,多个数据绑定,EasyMock伪造数据
    这个筛选列表利用弹性布局,将页面分配好,然后在右边利用scroll-view实现滚动(这里有一个小坑,scroll必须设置高度才能实现滚动条效果),由于数据量比较多,可以通过伪造数据的方法获取代码会看起来简洁很多。
    伪造数据地址用了很多次感觉挺方便的,也推荐给大家。
//远程数据请求
onLoad: function (options) {wx.request({url: 'https://www.easy-mock.com/mock/5b1ca1e041e3435437657ce0/filter/filter#!method=get',success: function (res) {that.setData({filters: res.data.data})},fail: function () {console.log('数据请求失败')},})}
复制代码
  • wx:for大法好,少写了很多页面代码,wx.showModal弹出框,信息提示,完好的用户体验。
  • 绑定手机号以及换绑
    点击进入绑定手机号码界面,输入手机号码获得6位随机验证码绑定手机号,再次进入界面时根据wx:ifwx:else进入不同的界面,如果已经绑定手机则提示已绑定且提供换绑功能。
Page({data: {inputPhone:'',identifyCodeInput: 0,identifyCause:0,msg:'获取验证码',time: 60,hasBindPhone: false,disabled: true},//获取输入的手机teleInput(e) {let inputPhone = e.detail.value;this.setData({inputPhone})},//获取验证码getIdentifyCode(e) {var that = this;const z = /^[1][3,4,5,7,8][0-9]{9}$/;let inputPhone = this.data.inputPhone;let msg = this.data.mes;let time = this.data.time;if(z.test(inputPhone)) {var num=""; for(var i=0;i<6;i++) { num+=Math.floor(Math.random()*10); } num = Number(num);wx.showModal({title: '提示',content: '验证码为:' + num,})   that.setData({identifyCause: num})     wx.setStorage({key: 'IdentifyCode',data: num,})wx.showToast({title: '验证码已发送',icon: 'success',duration: 1000})setInterval(function() {if(time >0) {time --;that.setData({msg: time + '后重新发送'})if(time === 0){that.setData({msg: '重新发送',time: 60})  }}},1000)}else {wx.showModal({title: '提示',content: '请输入正确的手机号码',})}},//获取验证码输入值identifyCodeInput(e) {const value = Number(e.detail.value);this.setData({identifyCodeInput:value,disabled: false})},//校验验证码check(e) {var that = this;const identifyCodeInput = this.data.identifyCodeInput;const identifyCause = that.data.IdentifyCause;const phoneNum = this.data.inputPhone;wx.getStorage({key: 'IdentifyCode',success:function(res) {that.setData({identifyCause: res.data})       }})if(identifyCodeInput === that.data.identifyCause) {wx.showToast({title: '手机号绑定成功',icon: 'success',duration: 1000})this.setData({hasBindPhone: true,})wx.setStorage({key: 'phoneNum',data: phoneNum,})wx.switchTab({url: '../user/user',})}else {wx.showModal({title: '提示',content: '验证码输入错误,请重新输入',success: function(res) {}})}},//检查用户是否绑定手机号onLoad(options) {wx.getStorage({key: 'phoneNum',success:(res)=>{if(res.data)console.log(res)this.setData({inputPhone:res.data,hasBindPhone: true})},})},//手机号换绑changePhone() {this.setData({hasBindPhone: false,inputPhone:''})}
})
复制代码

小结

初次习作,肯定有很多写得不好的地方,但还是希望能给大家带来一点点帮助;不足之处希望大家多多谅解与指导。也希望和大家在这个有爱的社区中一起成长共同进步,比心。附上:源码地址

转载于:https://juejin.im/post/5b1cb7dc5188257d8c7d725a

相关文章:

mutt使用小技巧 指定发件人 添加附件

经常我们需要从linux服务器上直接发送一些邮件到自己&#xff0c;或者用户的邮箱里&#xff0c;mail命令固然重要&#xff0c;但是缺点是不能方便的进行插入附件。这里选择使用mutt&#xff0c;方便又好用。 实例&#xff1a; echo "邮件内容" | mutt -e "my_hd…

恶犬秒变萌汪:东京大学开源“治愈系”GAN图片拼贴工具 | 技术头条

参加「CTA 核心技术及应用峰会」&#xff0c;请扫码报名 ↑↑↑译者 | linstancy责编 | 琥珀出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;教新手画画&#xff1f;字体风格迁移&#xff1f;换明星“假脸”&#xff1f;毫无疑问&#xff0c;在图像生成中…

【视频】视频传输协议:RTSP、RTP、RTCP、RTMP、HTTP

一、RTSP、RTP、RTCP RTSP、RTP、RTCP是一组协议,其中RTSP在应用层、RTP和RTCP在传输层。RTP用于传输流媒体数据,而RTCP对RTP进行控制、同步。 二、RTSP、RTMP、HTTP 1、共同点 RTSP、RTMP、HTTP都是用在应用层。理论上这三种协议都可以做直播和点播,但直播一般用RTSP和…

ActiveMQ5.14.5配置参数详解

Activemq-.xml1.加载properties配置参数。下面加载是访问broker的身份信息&#xff0c;即用户名和密码 <bean class"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name"locations"><value>file:…

正则表达式实现最小匹配

正则表达式默认情况下实现的是最大化匹配&#xff0c;这在有些情况下是非常不愿意出现的&#xff0c;比如下面这段代码&#xff1a; # starting IndiaInventoryAPP.exe" ~~DisplayVariableValues "parameterGroup,mailRecipients,ModuleArgs"~DisplayVariableVa…

Azure系列2.1.15 —— SharedAccessBlobPolicy

&#xff08;小弟自学Azure&#xff0c;文中有不正确之处&#xff0c;请路过各位大神指正。&#xff09; 网上azure的资料较少&#xff0c;尤其是API&#xff0c;全是英文的&#xff0c;中文资料更是少之又少。这次由于公司项目需要使用Azure&#xff0c;所以对Azure的一些学习…

Facebook AI新架构:全景FPN,同时完成图像实例与语义分割 | 极客头条

参加「CTA 核心技术及应用峰会」&#xff0c;请扫码报名 ↑↑↑整理 | 刘旭坤、Jane出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;实例分割和语义分割长期以来都是运用不同的神经网络架构来完成的&#xff0c;虽然最近出现了将语义和实例分割进行结合的…

【经验】向word中插入格式化的代码块

参考博客&#xff1a;如何在word中插入代码块 1、打开http://www.planetb.ca/syntax-highlight-word网站 语法高亮显示Word文档中的代码 2、将你的代码复制进去&#xff0c;选择编译语言&#xff0c;点击“Show Highlighted” 3、复制格式化后的代码 4、直接在word中粘贴代…

用路由器限制局域网的带宽流量

有时在上班的时候&#xff0c;带宽并不是很高&#xff0c;但又因个别人过量占用带宽导致其它人正常上网的速度都很慢&#xff0c;正常的工作都无法开展&#xff0c;所以对局域网内主机带宽流量的管理就必不可少了。 公司并不是很多的电脑&#xff0c;且预算不是很多的&…

Lumen / Laravel 5.5 使用网易邮箱 SMTP 发送邮件

2019独角兽企业重金招聘Python工程师标准>>> Laravel 是目前最流行的PHP框架&#xff0c;而Lumen 是 Laravel 的精简版&#xff0c;主要用于接口开发。 Laravel 邮件发送服务基于 Symfony 组件 Swift Mailer。 本文记录了在 Lumen / Laravel 5 环境中&#xff0c;使…

终于有人把数据、信息、算法、统计、概率和数据挖掘都讲明白了!

插画设计&#xff1a;万娟01什么是数据数据是什么&#xff1f;这几乎成为一个我们熟视无睹的问题。有不少朋友脑子里可能会直接冒出一个词“数字”——“数字就是数据”&#xff0c;我相信会有一些朋友会斩钉截铁地这么告诉我。一些朋友会在稍作思考后回答“数字和字符、字母&a…

【经验】配置Anaconda源

配置清华源&#xff1a; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

oracle update批量修改sql语句编写

update Suncco_Tz_Tbl_Task t set t.taskname网络部储备&#xff08;室分&#xff09;土建 , t.tasktype交换-交换主设备-电路域设备 , t.taskbyarea思明 , t.addresscoding2422BG00003735 update SUNCCO_TZ_TBL_TASK task set task.taskname11 , task.type33 where task.TA…

深入卷积神经网络背后的数学原理 | 技术头条

参加「CTA 核心技术及应用峰会」&#xff0c;请扫码报名 ↑↑↑作者 | Piotr Skalski译者 | Monanfei编辑 | 十月Rachel、Jane出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;【导读】在计算机神经视觉技术的发展过程中&#xff0c;卷积神经网络成为了其中…

【AI】在win10上安装TensorFlow2,安装成功,但是import tensorflow时报错:pywrap_tensorflow.py“, line 58

目录一、问题描述二、原因分析三、处理过程四、解决方法五、安装2.1和2.0命令的不同点1、TensorFlow2.02、TensorFlow2.1六、使用TenforFlow2.0-GPU时&#xff0c;报错:cudart64_100.dll not found1、错误信息如下2、原因分析3、解决方法七、测试TensorFlow是否支持GPU1、测试对…

SpringMVC4.x源码分析(五):request请求寻址HandlerMethod原理

2019独角兽企业重金招聘Python工程师标准>>> mvc:annotation-driven会将每一个Controllor内的被RequestMapping注解标注的方法解析为HandlerMethod对象&#xff0c;并存储在RequestMappingHandlerMapping的MappingRegistry属性中&#xff0c;寻址就是根据request请求…

在ASP.NET中指定出错页面,不让代码外泄!

在ASP.NET中指定出错页面&#xff0c;不让代码外泄&#xff01;在ASP.NET中原始的出错页面会暴露部分源代码&#xff0c;由此带来了潜在的安全隐患。ASP.NET允许应用程序出错时显示用户指定的页面&#xff0c;方法是在web.config文件中修改配置信息。 <? xml version"…

【经验】提高github的下载(克隆)速度

原理&#xff1a; 利用码云来克隆GitHub项目&#xff0c;然后从码云下载。 参见博客&#xff1a; 最详细的图文教程帮你解决GitHub下载慢或下载失败问题&#xff08;2019.8.10亲测有效&#xff09;

Erlang之父给程序员的两点忠告 | 缅怀

整理 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;北京时间 4月20日&#xff0c;据Erlang Solutions、Erlang Factories的创始人Francesco Cesarini的推特称&#xff0c;Erlang之父Joe Armstrong于4月20日去世&#xff0c;享年68岁。Francesco怀念道&am…

如何为你的博客文章自动添加版权信息?

转自:http://www.chinaz.com/web/2016/0616/541282.shtml https://www.feifanblog.com/ 好长时间没有分享关于网络技术的文章了&#xff0c;昨天有位朋友问我&#xff1a;“你博客每篇文章末尾的版权声明都是我自己手动添加的吗&#xff1f;”&#xff0c;看到这个问题我想很多…

2011-11-27

大三&#xff0c;这个关键时刻&#xff0c;目前自己正在写软件课程设计程序-教材订购系统&#xff0c;加油&#xff01;努力&#xff01;转载于:https://blog.51cto.com/3122770/728090

【Qt】Qt编码风格、命名约定

1、类名称以大写字母开头、函数名称以小写字母开头&#xff0c;并使用驼峰命名法&#xff1b;类名使用名词或名词短语、函数名使用动词或者动词短语&#xff1b; 2、常量应当大写并且尽可能在类的作用域内创建成枚举值&#xff0c;全局常量和宏通常是大写&#xff1b; 3、布尔变…

UC伯克利开源照片“隐写术”StegaStamp,打印照片能当二维码用!| 技术头条

参加「CTA 核心技术及应用峰会」&#xff0c;请扫码报名 ↑↑↑作者 |CV君来源 | 我爱计算机视觉&#xff08;id&#xff1a;aicvml&#xff09;要说目前最火的用到手机摄像头的应用是什么&#xff0c;毫无疑问非二维码识别莫属了。微信带起来的二维码热&#xff0c;几乎已经改…

你为世界杯而战,我为生活而战!

这什么23时直播揭幕战俄罗斯vs沙特 开始时间!很庆幸见到了本世界坏中第1个球!(四年一次比赛&#xff0c;四年一博!)接下来看看我在奋斗什么?(人生随时进行比赛&#xff0c;错了、对了、再错了、再对了、只要不放弃学习就有未来!)********************************************…

【C++】重载、重写、隐藏

1、重载&#xff1a;在同一个作用域中两个及以上的函数名相同但是参数个数或类型不同时构成重载&#xff0c;重载的本质是&#xff0c;编译后的函数会有不同的签名&#xff1b; 2、重写&#xff1a;这是类继承中的概念&#xff0c;基类中virtual标记的函数&#xff0c;在派生类…

有了它,AI甚至可以让你知道对方是否真的爱你?

“你到底爱不爱我&#xff1f;”这或许是恋爱双方出现频率最高的问题&#xff0c;想要知道对方大脑在想什么&#xff0c;并不是什么天方夜谭&#xff0c;通过科学技术还真的有望实现。不过&#xff0c;让如此大胆的想法变为现实&#xff0c;我们需要借助什么技术呢&#xff1f;…

基于jwt的用户登录认证

最近在app的开发过程中&#xff0c;做了一个基于token的用户登录认证&#xff0c;使用vuenodemongoDB进行的开发&#xff0c;前来总结一下。 token认证流程&#xff1a; 1&#xff1a;用户输入用户名和密码&#xff0c;进行登录操作&#xff0c;发送登录信息到服务器端。 2&…

跨平台网络游戏趋势和优势

跨平台网络游戏趋势和优势 前几年还是网页游戏蓬勃发展的状态&#xff0c;就有分析指出从明年开始网页游戏市场已经饱和&#xff0c;想想几年前客户端游戏也是同样的窘境&#xff0c;如果将桌面、移动设备、网页统称一个词汇的话&#xff0c;那就是终端&#xff0c;现在各种的终…

IAR生产HEX文件

刚刚接触IAR&#xff0c;编译默认生成的是.a90文件&#xff0c;但直接用avr studio下载时提示非正规HEX文件&#xff0c;不给我下载&#xff0c;郁闷了。 其实也简单&#xff0c;如下图所示配置文件后面加几行字就OK了。 //Output File -Ointel-extended,(XDATA).eep -Ointel-e…

【Qt】重新认识QObject

1、QObject父子对象的是设计模式中组合模式的实现。父对象和基对象不是一个概念&#xff0c;前者是在运行时管理子对象&#xff0c;是动态的&#xff0c;后者是在编译时判定派生关系&#xff0c;是静态的。 2、每个QObject至多有一个父对象&#xff0c;父对象中将子对象的指针放…