最近工作中,遇见了两个小问题,一时没有反应过来,特此写博客记录一下。希望下次秒反应!!
有一个界面,打开的时候,由于界面显示内容过多导致而出现了滚动条。第一次浏览窗口时,移动了滚动条到底部,此时我们关掉窗口,重新打开他他在底部。如图左,问题出现了,如何让他打开的时候如图右所示?
简单,直接让他的外层盒子scrollTop=0就可以了。诺,我的代码如下:
let wapperBox = document.getElementById('wapper_Box');if (wapperBox) {wapperBox.scrollTop = 0;}
在打开弹窗的时候,去调用此方法即可~
但是!!!
当你尝试在mounted生命周期钩子中获取DOM元素时,可能会遇到获取不到元素的情况。这是因为在mounted钩子执行时,DOM元素可能还没有完全渲染出来。为了确保能够正确获取到DOM元素,在Vue的nextTick中获取DOM元素,因为nextTick会在DOM更新之后执行。
诺,我的正确代码如下:
this.$nextTick(() => {let wapperBox = document.getElementById('wapper_Box');if (wapperBox) {wapperBox.scrollTop = 0;}});
另外一种情况,假如我们在处理数组层次比较深的情况下。我们改变了数组并且控制台打印出来都是理想数据的时候,界面上却显示的为非理想数据。此时要考虑两个问题:
1.数组层次比较深,我们要进行深拷贝。最后 this.basicInfo = updatedBasicInfo;进行赋值。
2.考虑nextTick。是否我们在Dom更新前去操作数据了。
checkboxChange(e, index, item, type) {let itemName = item.text;let updatedBasicInfo = JSON.parse(JSON.stringify(this.basicInfo)); // 深度克隆数据let updatedOtherInfo = JSON.parse(JSON.stringify(this.otherInfo)); // 深度克隆数据let updatedData = [...updatedBasicInfo, ...updatedOtherInfo];let targetItem = updatedData.find((data) => data.text === itemName);if (targetItem) {targetItem.ShowCheck = e;if (e) {this.rightArr.push(targetItem);} else {let indexToRemove = this.rightArr.findIndex((obj) => obj.text === itemName);if (indexToRemove !== -1) {this.rightArr.splice(indexToRemove, 1);}}}this.basicInfo = updatedBasicInfo;this.otherInfo = updatedOtherInfo;},