瀑布流在pc端和移动端切换时没有自动变化

来源:4-5 话题讨论:如何理解前台前端架构方案?

慕妹4110997

2022-11-20

瀑布流组件里面:

F12切换时,views/main/components/list/index.vue没有重新加载,也就没有重新执行isMobileTerminal,导致column没有监听到。

原因,在切换f12时 props.column 没有监听到变化,老师,这是为啥?

写回答

3回答

慕妹4110997

提问者

2022-12-19

// 触发计算

watch(

() => props.data,

(newVal) => {

// 重置数据源

const resetColumnHeight = newVal.every((item) => !item._style)

if (resetColumnHeight) {

// 构建高度记录容器

useColumnHeightObj()

}

nextTick(() => {

if (props.picturePreReading) {

waitImgComplate()

} else {

useItemHeight()

}

})

},

{

immediate: true,

deep: true

}

)


/**

* 监听列数变化,重新构建瀑布流

*/

const reset = () => {

setTimeout(() => {

// 重新计算列宽

useColumnWidth()

// 重置所有的定位数据,因为 data 中进行了深度监听,所以该操作会触发 data 的 watch

props.data.forEach((item) => {

item._style = null

})

}, 100)

}

watch(

() => props.column,

() => {

if (props.picturePreReading) {

// 在 picturePreReading 为 true 的前提下,需要首先为列宽滞空,列宽滞空之后,会取消瀑布流渲染

columnWidth.value = 0

// nextTick 数据改变之后,视图改变之后的回调

// 等待页面渲染之后,重新执行计算。否则在 item 没有指定过高度的前提下,计算出的 item 高度会不正确

nextTick(reset)

} else {

reset()

}

}

)

老师,这个是waterfull组件里面的监听列宽计算的代码

0
0

慕妹4110997

提问者

2022-12-19

//img.mukewang.com/szimg/639fdb9709cbbd7925541550.jpg

老师,在f12切换的时候这个都没有打印

0
1
Sunday
你这样写是不会打印的,因为他只在 setup 函数中打印了一次。
2022-12-19
共1条回复

Sunday

2022-11-20

你好

你的 watch 监听是怎么写的?  如果要监听 prop 那么需要指定一个 getter 的函数

0
1
慕妹4110997
老师您看下我的回复在上面
2022-12-19
共1条回复

基于 Vue3 ,打造前台+中台通用开发提效解决方案

42 种前台常见业务模型, 15 种中台通用组件,成为前端提效高手

788 学习 · 517 问题

查看课程