小程序的分类页面,通常会以侧边栏导航显示内容,我们使用了侧边选项卡和数据列表组件实现了分类展示的功能 ![](http://image109.360doc.com/DownloadImg/2023/10/1210/273676154_1_20231012105655804_wm.png)
还有个需求是从首页点击某个分类的时候,跳转到分类页时候需要选中对应的类别 ![](http://image109.360doc.com/DownloadImg/2023/10/1210/273676154_2_20231012105656663_wm.png)
01 增加页面参数 页面如果跳转时候需要这种接收参数并实现数据过滤效果的,需要定义页面参数。选择分类页面,选中页面,增加URL参数 ![](http://image109.360doc.com/DownloadImg/2023/10/1210/273676154_3_20231012105657570_wm.png)
我们需要增加两个参数,一个是当前的菜单选中项index,另外一个是当前菜单的数据标识classifyid 02 设置默认选中 因为默认选中需要通过参数接收,侧边选项卡的选中标签属性就需要根据表达式进行绑定 ![](http://image109.360doc.com/DownloadImg/2023/10/1210/273676154_4_20231012105658570_wm.png)
Number($page.dataset.params.index)||0
这里涉及到两个知识点,一个是类型转换,一个是短路运算符 我们的参数变量默认是文本类型,选中标签需要转换成数字类型,我们可以使用包装类,进行包装 短路运算符是计算左右表达式的返回结果,形成最终的结果。我们这里如果参数变量为空我们就返回一个0相当于第一个页签被选中 页签是选中了,但是列表还需要一个默认的分类ID来执行筛选。这种默认加载数据一般是在生命周期函数中执行,代码如下 export default { async onPageLoad(query) { //console.log('---------> LifeCycle onPageLoad', query) if($page.dataset.params.classifyid){ $page.dataset.state.categoryid=$page.dataset.params.classifyid } if($page.dataset.state.categoryid=="标签1"){ const result = await app.cloud.callModel({ name:'fwfl_8zsctva', methodName:'wedaGetRecords', params:{} }) $page.dataset.state.categoryid = result.records[0]?._id } }, onPageShow() { //console.log('---------> LifeCycle onPageShow') }, onPageReady() { //console.log('---------> LifeCycle onPageReady') }, onPageHide() { //console.log('---------> LifeCycle onPageHide') }, onPageUnload() { //console.log('---------> LifeCycle onPageUnload') }, }
在Js中如果假定一个条件则执行一段代码的语法是用If,圆括号里是要执行的表达式,我们第一个If的意思是如果参数变量不为空,那说明是从首页传过来的,那么我们就把参数变量赋值给我们的状态变量,这样数据列表就根据传入的值进行过滤 if($page.dataset.params.classifyid){ $page.dataset.state.categoryid=$page.dataset.params.classifyid }
第二种情况是,如果我们不从首页点击一个类别进入,而是直接点击底部导航条的分类,那么就需要加载默认选中类别的数据。因此我们需要从数据库里查询分类的数据,返回第一条数据 if($page.dataset.state.categoryid=="标签1"){ const result = await app.cloud.callModel({ name:'fwfl_8zsctva', methodName:'wedaGetRecords', params:{} }) $page.dataset.state.categoryid = result.records[0]?._id }
数据处理好了之后,我们回到首页重新设置一下宫格导航 03 设置宫格导航 宫格导航我们使用表达式绑定,重新修改一下表达式 $page.dataset.state.classify.records.map((item, index) => { return { title: item.flmc, iconSrc: item.tb, tapStatus: "inside", insideUrl: 'u_fen_lei', withParams: true, params: [ {"key":"index","value":index}, {"key":"classifyid","value":item._id} ], icon: '自定义图片' } })
这里的insideUrl需要设置成我们分类页的页面ID,可以从页面列表直接复制 ![](http://image109.360doc.com/DownloadImg/2023/10/1210/273676154_5_20231012105659257_wm.png)
params是页面传入的参数,我们把两个需要的参数都传入 最终的效果 ![](http://image109.360doc.com/DownloadImg/2023/10/1210/273676154_6_20231012105659945.gif)
|