当前位置 博文首页 > CSDN凉宸:uni-app实战项目,跟着做完你就可以独立作战了(三)

    CSDN凉宸:uni-app实战项目,跟着做完你就可以独立作战了(三)

    作者:[db:作者] 时间:2021-07-08 10:12

    搜索页导航栏

    我们先新建一个搜索页面
    在pages下新建home-search
    然后再navbar中定义点击事件再点击首页导航栏时进行跳转至搜索页
    在这里插入图片描述
    navbar.vue组件中

    在这里插入图片描述
    效果
    在这里插入图片描述
    完整代码:

    <template>
    	<view class="navbar">
    		<view class="navbar-fixed">
    			<!-- 状态栏 -->
    			<view :style="{height:statusBarHeight+'px'}"></view>
    			<!-- 导航栏内容 -->
    			<view @click.stop="open" class="navbar-content" :class="{search:isSearch}" :style="{height: navBarHeight+'px',width:windowWidth+'px'}">
    				<view class="navbar-content_search-icons">
    					<uni-icons type="back" size="22" color="#fff"></uni-icons>
    				</view>
    				<!-- 非搜索页显示 -->
    				<view v-if="!isSearch" class="navbar-serach">
    					<view class="navbar-serach_icon">
    						<uni-icons type="search"></uni-icons>
    					</view>
    					<view class="navbar-serach_text">uni-app、vue、react</view>
    				</view>
    				<!-- 搜索页显示 -->
    				<view v-else class="navbar-serach">
    					<input class="navbar-serach_text" type="text" value="" placeholder="请输入要搜索的内容" />
    				</view>
    			</view>
    		</view>
    		<view :style="{height: statusBarHeight+navBarHeight+'px'}"></view>
    	</view>
    </template>
    
    <script>
    	export default {
    		props:{
    			isSearch:{
    				type:Boolean,
    				type:false
    			}
    		},
    		data() {
    			return {
    				statusBarHeight:20,
    				navBarHeight:45,
    				windowWidth:375
    			};
    		},
    		created() {
    			this.onload()
    		},
    		methods:{
    			open(){
    				if(this.isSearch) return
    				uni.navigateTo({
    					url:'/pages/home-search/home-search'
    				})
    			},
    			onload(){
    				// 获取手机信息
    				const info= uni.getSystemInfoSync()
    				this.statusBarHeight=info.statusBarHeight
    				this.windowWidth=info.windowWidth
    				// #ifndef H5 || APP-PLUS || MP-ALIPAY
    				// 获取胶囊位置
    				const menuButtonInfo=uni.getMenuButtonBoundingClientRect()
    				this.navBarHeight=(menuButtonInfo.bottom-info.statusBarHeight)+(menuButtonInfo.top-info.statusBarHeight)
    				this.windowWidth=menuButtonInfo.left
    				// #endif
    			}
    		}
    	}
    </script>
    
    <style lang="scss">
    .navbar{
    	.navbar-fixed{
    		position: fixed;
    		top: 0;
    		left: 0;
    		z-index: 99;
    		width: 100%;
    		background-color: $mk-base-color;
    		.navbar-content{
    			padding: 0 15px;
    			box-sizing: border-box;
    			display: flex;
    			justify-content: center;
    			align-items: center;
    			.navbar-serach{
    				display: flex;
    				align-items: center;
    				width: 100%;
    				height: 30px;
    				border-radius: 30px;
    				padding: 0 10px;
    				background-color: #fff;
    				.navbar-serach_icon{
    					margin-right: 10px;
    				}
    				.navbar-serach_text{
    					font-size: 12px;
    					color: #999;
    				}
    			}
    			&.search{
    				padding-left: 0;
    				.navbar-content_search-icons{
    					margin-left: 10px;
    					margin-right: 10px;
    				}
    				.navbar-serach{
    					border-radius: 5px;
    				}
    			}
    		}
    	}
    }
    </style>
    
    

    内容区域

    搜索历史

    静态搜索历史标签内容
    在这里插入图片描述
    效果
    在这里插入图片描述
    完整代码:

    <template>
    	<view class="home">
    		<navbar :isSearch="true"></navbar>
    		<!-- 搜索历史 -->
    		<view class="home-list">
    			<view class="label-box">
    				<view class="label-header">
    					<text class="label-title">搜索历史</text>
    					<text class="label-clear">清空</text>
    				</view>
    				<view class="label-content">
    					<view class="label-content_item" v-for="(item,index) in 10" :key='index'>
    						{{item}} 内容
    					</view>
    				</view>
    			</view>
    		</view>
    	</view>
    </template>
    
    <script>
    	export default {
    		data() {
    			return {
    				
    			}
    		},
    		methods: {
    			
    		}
    	}
    </script>
    
    <style lang="scss">
    	page{
    		height: 100%;
    		display: flex;
    		background-color: #f5f5f5;
    	}
    	.home{
    		display: flex;
    		flex-direction: column;
    		flex: 1;
    		border: 1px solid red;
    		.home-list{
    			.label-box{
    				background-color: #Fff;
    				margin-bottom: 10px;
    				.label-header{
    					display: flex;
    					justify-content: space-between;
    					font-size: 14px;
    					color: #666;
    					padding: 10px 15px;
    					border-bottom: 1px solid #f5f5f5;
    					.label-title{
    						color: $mk-base-color;
    					}
    					.label-clear{
    						color: #30b33a;
    						font-weight: bold;
    					}
    				}
    				.label-content{
    					display: flex;
    					flex-wrap:wrap ;
    					padding: 15px;
    					padding-top: 0;
    					.label-content_item{
    						padding: 2px 10px;
    						margin-top: 12px;
    						margin-right: 10px;
    						border-radius: 5px;
    						border: 1px solid #666;
    						font-size: 14px;
    						color: #666;
    						
    					}
    				}
    			}
    		}
    	}
    </style>
    
    

    在此页面中做如下添加
    在这里插入图片描述
    在这里插入图片描述

    搜索框实现

    在navbar组件中定义input事件
    我们将输入的数据实时获取到,在传出去
    在这里插入图片描述
    在home-search组件中我们定义传出的相同事件,然后实时获取

    在这里插入图片描述

    使用vuex进行搜索记录管理

    在根目录下创建store文件夹 在其中创建index.js文件

    在这里插入图片描述
    在main.js中引入 给放到实例中去
    在这里插入图片描述

    后面进行编写


    在这里插入图片描述
    在home-search组件中引入调用
    在这里插入图片描述
    做更改喽 看好文件是否正确
    在这里插入图片描述
    在这里插入图片描述
    这样就可以往state中添加数据了
    vuex就生效了

    区分一下是展示搜索结果还是历史记录

    在这里插入图片描述
    在搜索栏将数据展示,模拟我们搜索到的数据
    在这里插入图片描述
    在这里插入图片描述
    在输入框input事件中调用get_list并将value传过去
    在这里插入图片描述
    在输入框input事件中做一个处理
    在这里插入图片描述
    步入正轨了
    新建get_search 函数
    在这里插入图片描述
    注册api
    在这里插入图片描述
    名称换一下即可
    在这里插入图片描述
    在change中加入
    在这里插入图片描述
    在get_search中加入
    在这里插入图片描述
    在这里插入图片描述
    在list-card中
    在这里插入图片描述
    home-search中接收
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    navbar中
    在这里插入图片描述
    看下面一定要对应哦
    在这里插入图片描述

    看下面添加的内容
    在这里插入图片描述
    在搜索时显示加载中…
    然后使用if语句判断是否显示,绑定变量loading
    在查询开始设置loading变量为true
    查询完之后设置为false(不管成功还是失败都要设置)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    更改如下,更严谨
    在这里插入图片描述

    实现返回事件

    在这里插入图片描述

    实现历史记录清空

    store/index.js中添加
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    按照下面的位置做更改
    在这里插入图片描述
    用下面那种方法更好哦
    在这里插入图片描述
    这样搜索功能就全部实现了


    敬请期待后续博文

    cs