需在实现列表的基础上开发
【微信小程序-原生开发】实用教程15 - 列表的排序、搜索(含云数据库常用查询条件的使用方法,t-search 组件的使用)_朝阳39的博客-CSDN博客
https://sunshinehu.blog.csdn.net/article/details/129356909
效果预览
技术要点
详情的获取有两种方式:
方式一:通过 id 获取详情
优点:可以确保每次打开详情都是最新的内容
缺点:需要访问详情接口,会消耗调用次数和客户流量
以查看成员详情为例
<t-cell url="{{'/pages/components/friend/detail/index?id='+item.memberID}}" align='top' leftIcon="user-add" wx:if="{{item.type === 3}}" title="{{'热烈欢迎 '+item.publisher+' 加入DOS圆梦大家庭!'}}" />
- t-cell 组件的 url 属性可以直接实现页面跳转,效果同 wx.navigateTo
当然,也可以绑定点击事件,触发页面跳转
bindtap="gotoDetail" data-detail="{{item}}"
gotoDetail(e) {
let memberID = e.currentTarget.dataset.detail._id
wx.navigateTo({
url: '/pages/components/friend/detail/index?id='+ memberID
})
}
以上为在目标页面路径后添加参数的方式,实现页面传参,仅适用于参数内容少,且为字符串等基础数据类型的参数。(若是对象等复杂类型则不适合此种方式的页面传参)
详情页接收参数并查询详情
在页面生命周期 onLoad 方法中,接收来自上个页面通过页面路径传来的参数
onLoad(options) {
// 通过id获取详情
let id = options.id
if (id) {
this.setData({
id: id
})
this.getDetail()
return
}
}
getDetail() {
let that = this
that.setData({
show: false
})
wx.showLoading({
title: '加载中',
})
db.doc(this.data.id).get().then(res => {
that.setData({
detail: res.data,
show: true
})
wx.hideLoading()
}).catch(() => {
that.setData({
show: true
})
wx.hideLoading()
})
},
方式二:直接从列表传递详情
优点:无需访问接口,可节省调用次数和客户流量
缺点:查看的内容为获取当前列表时得到的详情内容,可能已不是最新的数据内容。
当页面跳转需传递复杂参数(如对象)时,则需采用以下方式
gotoDetail(e) {
let detail = e.currentTarget.dataset.detail
wx.navigateTo({
url: '/pages/components/friend/detail/index',
success: function (res) {
res.eventChannel.emit('sendData', {
data: detail
})
}
})
}
详情页接收此种参数的方法如下:
onLoad() {
let that = this
// 接收列表页传入的复杂数据--对象(详情)
const eventChannel = this.getOpenerEventChannel()
eventChannel.on('sendData', function (res) {
that.setData({
id: res.data._id,
detail: res.data,
show: true
})
})
},