WechatApplet-伪搜索(纯前端)
Posted web半晨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WechatApplet-伪搜索(纯前端)相关的知识,希望对你有一定的参考价值。
说明
1.分页
2.返回顶部
3.实时搜索
4.点击搜索
5.自定义组件
6.父组件向子组件传值
7.父组件调用子组件中的方法(函数)
8.子组件向父组件传值
9.清除输入框
10.模糊查询正则匹配
11.全局样式
12.联系:MJ2506562048
1、页面
1.1、html 部分
<view>
<!-- 搜索 -->
<view class="fixed_0_0 back_FFF z_index_9">
<view class="border_b_666" style="display:{{isImg?'block':'none'}}">
<view class="grid_c2_350 padding_l_36 padding_tb_22 grid_row_gap_16">
<view>每页条数:{{cont}}</view>
<view>总条数:{{total}}</view>
<view>当前页数:{{page-1}}</view>
<view>总页数:{{totalPage}}</view>
</view>
<view class="grid_c3_200 padding_l_36 grid_row_gap_18 grid_column_gap_42">
<view class="border_111 padding_10 radius_6">0:暂未开发</view>
<view class="border_111 padding_10 radius_6">1:已完成</view>
<view class="border_111 padding_10 radius_6">2:开发未结束</view>
<view class="border_111 padding_10 radius_6">3:只有源码</view>
<view class="border_111 padding_10 radius_6">4:已废弃</view>
</view>
<view class="margin_t_26">
<radio-group bindchange="radioChange">
<view class="dis_r_se">
<label class="">
<radio value="1" checked="true" />点击搜索
</label>
<label class="">
<radio value="2" />实时搜索
</label>
</view>
</radio-group>
</view>
<search id="searchId" pla="{{pla}}" btnTitle="{{btnTitle}}" searchType="{{searchType}}" bind:myEvent="onMyEvent"></search>
</view>
<view class="dis_r_c padding_tb_16" catchtap="showSearch">
<image class="img" src="{{isImg?'/image/public/towards_top.png':'/image/public/towards_bottom.png'}}"></image>
</view>
</view>
<!-- 功能列表 -->
<view class="{{isImg?'margin_t_570':'margin_t_90'}}">
<view class="dis_r_sb margin_tb_20 padding_tb_20 padding_lr_30 border_b_666" wx:for="{{dataList}}" wx:key="index" bindtap="details" data-item="{{item}}">
<view class="dis_r_fs width_520 font_size_30">
<view class="flex_1 font_weight_700">{{index+1}}、</view>
<view class="flex_9 ellipsis color_777">{{item.status}}-{{item.title}}</view>
</view>
<view class="width_100 radius_6 font_size_26 color_EEE back_555 line_height_60 text_align_center letter_spacing_2" catchtap="sourceCode" data-url="{{item.url}}" wx:if="{{item.url}}">源码</view>
</view>
</view>
<!-- 返回顶部 -->
<backToTop wx:if="{{scrollTop}}"></backToTop>
</view>
1.2、json 部分
{
"usingComponents": {
"search": "/components/search/search"
},
"navigationBarTitleText": "伪搜索"
}
1.3、javascript 部分
const {
globalData: {
jsonData: {
functionList
},
showToast
}
} = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
dataList: [],
scrollTop: false,
searchType: 1,
btnTitle: '搜索',
pla: '请输入标题',
page: 1,
cont: 10,
total: 0,
totalPage: 0,
scrolls: true,
isImg: false
},
// 展开搜索
showSearch() {
this.setData({
isImg: !this.data.isImg,
searchType: this.data.searchType
});
},
// 选择搜索类型
radioChange({
detail: {
value
}
}) {
// 调用子组件的函数方法
this.selectComponent("#searchId").initData();
this.setData({
searchType: value,
page: 1,
scrolls: true,
dataList: []
});
this.getData();
},
// 获取数据
getData() {
wx.showLoading({
title: '加载中',
mask: true
});
let page = this.data.page,
totalPage = this.data.totalPage,
cont = this.data.cont,
dataList = this.data.dataList,
newData = [];
if (page > totalPage) {
this.setData({
scrolls: false
});
return showToast('没有更多数据了', 'none', 2000, false);
};
for (let i = cont * page - 10; i < page * cont; i++) {
const item = functionList[i];
if (item) {
newData.push(item);
};
};
this.setData({
dataList: [...dataList, ...newData],
page: page += 1
});
wx.nextTick(() => {
wx.hideLoading();
});
},
// 接收子组件传过来的值
onMyEvent({
detail: {
value
}
}) {
if (!value) {
this.setData({
dataList: [],
page: 1,
scrolls: true
});
this.getData();
return false
};
this.setData({
dataList: [],
scrolls: false
});
this.setData({
dataList: functionList.filter(function (item) {
let inputValue = new RegExp(`(.*)(${value.split('').join(')(.*)(')})(.*)`, 'i');
return item.title.match(inputValue);
})
});
if (!this.data.dataList.length) showToast('未找到匹配的数据');
},
// 复制路径
sourceCode({
currentTarget: {
dataset: {
url
}
}
}) {
wx.setClipboardData({
data: url,
success() {
showToast('链接复制成功', 'success');
// wx.getClipboardData({
// success(res) {
// console.log(res.data)
// }
// })
}
})
},
// 跳转到详情页面
details({
currentTarget: {
dataset: {
item: {
path,
status
}
}
}
}) {
switch (status) {
case 0:
showToast('暂未开发');
break;
case 1:
wx.navigateTo({
url: '/' + path
});
break;
case 2:
showToast('开发未结束');
break;
case 3:
showToast('无页面只有源码');
break;
default:
showToast('已废弃');
break;
};
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.setData({
total: functionList.length,
totalPage: Math.ceil(functionList.length / 10)
});
this.getData();
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
if (this.data.scrolls) {
this.getData();
}
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
},
/**
* 监听滚动条
*/
onPageScroll: function ({
scrollTop
}) {
this.setData({
scrollTop: scrollTop >= 100 ? true : false
})
}
})
2、搜索组件
2.1、html 部分
<view>
<!-- 按钮搜索 -->
<view class="dis_r_sb margin_30" wx:if="{{searchType==1?true:false}}">
<view class="flex_6 dis_r_sb border_666 padding_10 radius_8">
<input class="flex_8 height_50" placeholder="{{pla}}" value="{{clickInput}}" bindinput="clickInputF"></input>
<view class="flex_1 dis_r_c margin_l_26" catchtap="clear">
<view class="clear_30">×</view>
</view>
</view>
<view class="flex_1 margin_l_36 text_align_center padding_10 radius_6 back_theme color_222 font_weight_600" catchtap="clickSearch">{{btnTitle}}</view>
</view>
<!-- 实时输入 -->
<view class="dis_r_sb margin_30" wx:if="{{searchType==2?true:false}}">
<view class="flex_6 dis_r_sb border_666 padding_10 radius_8">
<input class="flex_8 height_50" placeholder="{{pla}}" value="{{realTimeInput}}" bindinput="realTimeInputF"></input>
<view class="flex_1 dis_r_c margin_l_26" catchtap="clear">
<view class="clear_30">×</view>
</view>
</view>
</view>
</view>
2.2 JavaScript 部分
const {
globalData: {
jsonData: {
functionList
},
showToast
}
} = getApp();
Component({
// 此操作是使用全局样式
options: {
addGlobalClass: true
},
/**
* 组件的属性列表
*/
properties: {
pla: {
type: String,
value: '请输入内容'
},
btnTitle: {
type: String,
value: '提交'
},
searchType: {
type: Number,
value: 1
}
},
// 实时搜索
realTimeInputF({
detail: 前端开发工具vscode如何快速生成代码片段