当前位置: 首页 > news >正文

记录一下小程序城市索引栏开发经历

  • 背景。小程序开发,需要通过城市关联获取数据。所以选择城市是必经之路。点击打开城市列表。需要实现的是可以
    1. 搜索。
    2. 可以通过右侧字母索引查看。
  • 这其中比较繁琐的就是在搜索的时候遮罩的显示和隐藏。以及查询出结果是,如果结果为空或者有值该怎样显示的情况。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 下面是具体代码
    1. 需要注意的是。在遮罩层的显示和隐藏方面需要用到z-index来处理图层。
    2. 如输入框要在遮罩层上方。遮罩层要是半透明。以及未查询到结果也需要正常显示。其中他们有时需要同时显示。有时却需要互斥,不能同时显示。
<template><view class="container"><view class="search-box" style="position: relative; z-index: 10001"><uni-easyinputtype="text"placeholder="请输入城市名称"v-model="searchKeyword"@input="filterCities"@focus="onSearch = true"@blur="handleBlur"style="position: relative" /></view><view v-if="maskShow" class="overlay" @click="onSearch = false"></view><u-index-list v-if="indexSearchShow" :scrollTop="scrollTop" :index-list="['A', 'B']"><view v-for="(item, index) in indexList" :key="index" @click="handleClick(item)"><u-index-anchor :index="item.index" /><view class="list-cell">{{ item.cityName }} </view></view></u-index-list><uni-list v-if="searchResShow" class="panelCustom"><uni-list-itemv-for="(item, index) in searchDataList":key="index":title="item.cityName":clickable="true"@click="handleSearchClick(item)" /></uni-list><view v-if="noSearchResShow" style="text-align: center; margin-top: 20rpx; display: block"><text>未查询到结果</text></view></view>
</template>
<script>
export default {data() {return {scrollTop: 0,indexList: [{ index: 'A', cityCode: '110000', cityName: '北京市' },{ index: 'B', cityCode: '310000', cityName: '上海市' }],// 输入框:是否正在查询onSearch: false,// 输入框:搜索查询结果searchDataList: [],// 输入框:搜索的关键字searchKeyword: ''};},computed: {// 索引:是否展示搜索结果面板indexSearchShow() {return this.maskShow || !this.onSearch;},// 定义遮罩显示变量maskShow() {return this.onSearch && !this.noSearchResShow && !this.searchResShow;},// 未查询结果面板:未查询到结果noSearchResShow() {return this.onSearch && !this.searchResShow && this.searchKeyword !== '';},// 输入框:是否展示搜索结果面板searchResShow() {return this.onSearch && this.searchDataList.length > 0;}},onPageScroll(e) {this.scrollTop = e.scrollTop;},methods: {/** 索引:选择结果 */handleClick(e) {uni.navigateBack({ url: './detail?cityCode=' + e.cityCode + '&cityName=' + e.cityName });uni.$emit('update', { cityCode: e.cityCode, cityName: e.cityName });},// 输入框:搜索filterCities(val) {if (val === '') {this.searchDataList = [];return;}this.$u.post('/api/miniWechat/resource/hospital/findHospitalRegion', { cityName: val }).then((res) => {console.log('filterCities.post:', res);if (res.code === 200) {this.searchDataList = res.data ? res.data : [];} else {this.searchDataList = [];}});console.log('filterCities:', val);},/** 输入框:点击选择结果 */handleSearchClick(e) {console.log('handleSearchClick:', e);this.handleClick(e);},/** 输入框:失去焦点 */handleBlur() {if (this.searchKeyword === '') {this.onSearch = false;}}}
};
</script>
<style scoped>
.list-cell {display: flex;box-sizing: border-box;width: 100%;padding: 10px 24rpx;overflow: hidden;color: #323233;font-size: 14px;line-height: 24px;background-color: #fff;
}
.container {padding: 20rpx;
}
/* 半透明遮罩层 */
.overlay {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background-color: rgba(0, 0, 0, 0.1);z-index: 9998;
}
.overlay_list {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background-color: write;z-index: 9998;
}
.search-input {height: 80rpx;padding: 0 24rpx;font-size: 28rpx;background-color: #fff;z-index: 10001;
}
.panelCustom {z-index: 10000;
}
</style>
  • 总结。
    1. 参照现有样板制作,虽然不能百分百相同。但能学到他们的设计思路。以及在开发时处理问题时并进行学习。
    2. 这次对computed有四个计算属性的应用。逐渐发现computed和watch之间在使用上亲身理解之间的差别。我也许说的不对,但说一下。从应用情况角度来说,computed时将计算结果用于变量,比如说我定义了计算属性A,当B和C有变化时会作用于A, 此时A就自动计算,不用认为参与。那么watch就是要监听某个属性。自我感觉没有computed灵活。但watch是实时的,能做的业务逻辑就比computed要多了,因为computed是会缓存数据的。
    3. 页面之间的数据传递这里面用到了事件的通知。uni.nagitiveTo可以通过url传参。但是uni.nagitiveBack却不行。需要使用this. o n 和 t h i s . on和this. onthis.emit进行事件的注册和通知。但是在者之间会发现this在要回退的页面中已经无法获取了。所以需要通过另外的方式来处理。通过getCurrentPages().pop()获取到页面,并使用此变量进行数据的赋值。这部分会单独记录。
http://www.lqws.cn/news/506197.html

相关文章:

  • 鸿蒙开发深入解析:Service Ability(后台任务)全面指南
  • Spring Boot 返回错误文件的正确性分析与优化
  • httpbin.org是什么,有什么作用
  • 验证 TCP 连接在异常情况下的断开机制之进程(客户端)被 kill 掉
  • ABP VNext + BFF(Backend for Frontend)模式:Angular/React 专用聚合层
  • 【软考高级系统架构论文】论单元测试方法及应用
  • 技术QA | ADC/DAC芯片测试研讨会笔记请查收!
  • uni-app项目实战笔记24--uniapp实现图片保存到手机相册
  • 【matlab定位代码】基于AOA和TDOA混合的定位方法,背景为三维空间,自适应锚点数量,订阅专栏后可直接查看源代码
  • 记录写一个markdown-it插件来转换视频
  • HTML基础知识
  • Flask(五) 表单处理 request.form
  • day41/60
  • 51c嵌入式~电路~合集8
  • 集群聊天服务器---muduo库使用(2)
  • Kafka如何保证消息可靠?
  • 应用交付厂商F5发布全新应用交付与安全平台,全面释放AI潜能
  • Kubernetes 从入门到精通-StatefulSet控制器
  • vue 路由学习
  • Lost connection to Mysql server at ‘reading initial communication packet‘如何解决?
  • 09-Python函数详解
  • Anaconda虚拟环境安装torch-gpu
  • Linux操作系统Nginx Web服务
  • C++的单例模式
  • 【PDF】Java itextpdf 生成PDF时添加自定义页脚
  • 【android bluetooth 协议分析 05】【蓝牙连接详解2】【acl_interface_t介绍】
  • C预处理详解2
  • 桌面小屏幕实战课程:DesktopScreen 7 文件系统
  • 01-StarRocks安装部署FAQ
  • HOW - 图片的一倍图、二倍图和三倍图