uni-app实战项目,跟着做完你就可以独立作战了
Posted David凉宸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uni-app实战项目,跟着做完你就可以独立作战了相关的知识,希望对你有一定的参考价值。
搜索页导航栏
我们先新建一个搜索页面
在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中添加
按照下面的位置做更改
用下面那种方法更好哦
这样搜索功能就全部实现了
敬请期待后续博文
以上是关于uni-app实战项目,跟着做完你就可以独立作战了的主要内容,如果未能解决你的问题,请参考以下文章