开始
搜索页目前没法搜索
先来配置页面,希望可以上拉刷新,隐藏它的滚动条。
开启下拉刷新。
"enablePullDownRefresh": true,
滚动条和回弹已经关了
可以下拉刷新
用首页的这种样式
引入首页也引用的indexList组件。
import indexList from '@/components/index/index-list.vue';
复制首页的list的数据。
list: [{
userpic: "../../static/demo/userpic/12.jpg",
username: "昵称",
isguanzhu: false,
title: "我是标题",
type: "img", // img:图文,video:视频
titlepic: "../../static/demo/datapic/11.jpg",
infonum: {
index: 0, //0:没有操作,1:顶,2:踩;
dingnum: 11,
cainum: 11,
},
commentnum: 10,
sharenum: 10,
},
{
userpic: "../../static/demo/userpic/12.jpg",
username: "昵称",
isguanzhu: true,
title: "我是标题",
type: "video", // img:图文,video:视频
titlepic: "../../static/demo/datapic/11.jpg",
playnum: "20w",
long: "2:47",
infonum: {
index: 1, //0:没有操作,1:顶,2:踩;
dingnum: 11,
cainum: 11,
},
commentnum: 10,
sharenum: 10,
}
]
<block v-for="(item,index) in list" :key="index">
<index-list :item="item" :index="index"></index-list>
</block>
复制首页空数据显示的组件
<template v-else>
<no-thing></no-thing>
</template>
import noThing from '@/components/common/no-thing.vue';
<template v-if="list.length>0">
<block v-for="(item,index) in list" :key="index">
<index-list :item="item" :index="index"></index-list>
</block>
</template>
否则显示空
<template v-else>
<no-thing></no-thing>
</template>
复制上拉加载
<!-- 上拉加载 -->
<load-more :loadtext="items.loadtext"></load-more>
import noThing from '@/components/common/no-thing.vue';
noThing
放在最外层
loadtext:'上拉加载更多',
<load-more :loadtext="items.loadtext"></load-more>
换成当前页面的属性变量
<load-more :loadtext="loadtext"></load-more>
监听上拉加载
复制首页的loadMore方法。
这里我们不传任何值
这些都改成当前页的数据
// 上拉加载
loadmore() {
if (this.loadtext != "上拉加载更多") {
return;
}
// 修改状态
this.loadtext = "加载中...";
// 获取数据
setTimeout(() => {
//获取完成
let obj = {
userpic: "../../static/demo/userpic/12.jpg",
username: "昵称",
isguanzhu: false,
title: "我是标题",
type: "img", // img:图文,video:视频
titlepic: "../../static/demo/datapic/11.jpg",
infonum: {
index: 0, //0:没有操作,1:顶,2:踩;
dingnum: 11,
cainum: 11,
},
commentnum: 10,
sharenum: 10,
};
this.list.push(obj);
this.loadtext = "上拉加载更多";
}, 1000);
// this.loadtext="没有更多数据了";
}
onReachBottom() {
this.loadmore();
},
搜索事件
来模拟后端加载的数据
// 搜索事件
getdata() {
uni.showLoading({
title: '加载中',
mask: false
});
// 请求服务器 post keyword:val
setTimeout(() => {
let arr = [{
userpic: "../../static/demo/userpic/12.jpg",
username: "昵称",
isguanzhu: false,
title: "我是标题",
type: "img", // img:图文,video:视频
titlepic: "../../static/demo/datapic/11.jpg",
infonum: {
index: 0, //0:没有操作,1:顶,2:踩;
dingnum: 11,
cainum: 11,
},
commentnum: 10,
sharenum: 10,
},
{
userpic: "../../static/demo/userpic/12.jpg",
username: "昵称",
isguanzhu: true,
title: "我是标题",
type: "video", // img:图文,video:视频
titlepic: "../../static/demo/datapic/11.jpg",
playnum: "20w",
long: "2:47",
infonum: {
index: 1, //0:没有操作,1:顶,2:踩;
dingnum: 11,
cainum: 11,
},
commentnum: 10,
sharenum: 10,
}
];
this.list = arr;
uni.hideLoading();
this.issearch = true;
}, 1000);
},
// 监听点击搜索按钮事件
onNavigationBarSearchInputConfirmed(e) {
if (e.text) {
this.getdata(e.text);
}
},
这个是取消按钮
// 监听搜索框文本变化
onNavigationBarSearchInputChanged(e) {
if (e.text) {
this.getdata(e.text);
}
},
有值才传过去
监听搜索框的变化。
// 监听搜索框文本变化
onNavigationBarSearchInputChanged(e) {
if (e.text) {
this.getdata(e.text);
}
},
默认的数据就可以删了
默认的显示。、
输入关键字搜索
判断用户是否点击了搜索
issearch:false,
<template v-else-if="issearch && list.length<1">
<no-thing></no-thing>
</template>
点击搜索后,设置为true
// 监听点击搜索按钮事件
onNavigationBarSearchInputConfirmed(e) {
console.log("监听点击搜索按钮事件" + JSON.stringify(e.text));
if(e.index){
this.issearch=true;
this.getdata(e.index);
}
},
默认是空的,
也可以放到请求服务器之后。再设置为true
uni.hideLoading();
this.issearch = true;
搜索到的数据如果为空
本节代码
<template>
<view>
<template v-if="list.length>0">
<block v-for="(item,index) in list" :key="index">
<index-list :item="item" :index="index"></index-list>
</block>
<!-- 上拉加载 -->
<load-more :loadtext="loadtext"></load-more>
</template>
<template v-else-if="issearch && list.length<1">
<no-thing></no-thing>
</template>
</view>
</template>
<script>
import indexList from '@/components/index/index-list.vue';
import loadMore from '@/components/common/load-more.vue';
import noThing from '@/components/common/no-thing.vue';
export default {
components: {
indexList,
loadMore,
noThing
},
data() {
return {
issearch:false,
loadtext: '上拉加载更多',
list: []
}
},
// 监听原生标题导航按钮点击事件
onNavigationBarButtonTap(e) {
if (e.index == 0) {
uni.navigateBack({
delta: 1
});
}
},
// 监听搜索框文本变化
onNavigationBarSearchInputChanged(e) {
console.log("监听点击搜索按钮事件" + JSON.stringify(e.text));
},
// 监听点击搜索按钮事件
onNavigationBarSearchInputConfirmed(e) {
console.log("监听点击搜索按钮事件" + JSON.stringify(e.text));
if(e.index){
this.issearch=true;
this.getdata(e.index);
}
},
onReachBottom() {
this.loadmore();
},
// 监听点击搜索按钮事件
onNavigationBarSearchInputConfirmed(e) {
if (e.text) {
this.getdata(e.text);
}
},
// 监听搜索框文本变化
onNavigationBarSearchInputChanged(e) {
if (e.text) {
this.getdata(e.text);
}
},
methods: {
// 搜索事件
getdata() {
uni.showLoading({
title: '加载中',
mask: false
});
// 请求服务器 post keyword:val
setTimeout(() => {
let arr = [{
userpic: "../../static/demo/userpic/12.jpg",
username: "昵称",
isguanzhu: false,
title: "我是标题",
type: "img", // img:图文,video:视频
titlepic: "../../static/demo/datapic/11.jpg",
infonum: {
index: 0, //0:没有操作,1:顶,2:踩;
dingnum: 11,
cainum: 11,
},
commentnum: 10,
sharenum: 10,
},
{
userpic: "../../static/demo/userpic/12.jpg",
username: "昵称",
isguanzhu: true,
title: "我是标题",
type: "video", // img:图文,video:视频
titlepic: "../../static/demo/datapic/11.jpg",
playnum: "20w",
long: "2:47",
infonum: {
index: 1, //0:没有操作,1:顶,2:踩;
dingnum: 11,
cainum: 11,
},
commentnum: 10,
sharenum: 10,
}
];
this.list = arr;
uni.hideLoading();
this.issearch = true;
}, 1000);
},
// 上拉加载
loadmore() {
if (this.loadtext != "上拉加载更多") {
return;
}
// 修改状态
this.loadtext = "加载中...";
// 获取数据
setTimeout(() => {
//获取完成
let obj = {
userpic: "../../static/demo/userpic/12.jpg",
username: "昵称",
isguanzhu: false,
title: "我是标题",
type: "img", // img:图文,video:视频
titlepic: "../../static/demo/datapic/11.jpg",
infonum: {
index: 0, //0:没有操作,1:顶,2:踩;
dingnum: 11,
cainum: 11,
},
commentnum: 10,
sharenum: 10,
};
this.list.push(obj);
this.loadtext = "上拉加载更多";
}, 1000);
// this.loadtext="没有更多数据了";
}
}
}
</script>
<style>
</style>