请问如何在页面渲染完执行一个函数--因为加载不完,页面的高度不确定导致header没办法定位


#1

就一个about页面,没有外部数据。进入后,header因为手机地址栏显示与否定位不准确。现在就是要在页面渲染完后执行to(0,0),但是除了设置setTimeout就没有其他方法了。setTimeout还不稳定。
尝试了,
mounted,不行。mounted还没等加载完就执行完了。
监听路由,不行。
$nextTick,也不行。
window.onload,不行。
试了resize,出错,还没进去about,其他页面就反应,没继续了。

各种方法都试了,就是没办法在页面加载完执行一个方法。
进去路由后,数据不变了。难道只能setTimeout?

谁有什么办法吗?


#2

还有个 问题,为什么我写在about.vue中的方法,在其他的页面也会被执行?
这个是写在about.vue中,结果在所有页面都执行。请问这个是怎么回事?
mounted(){
window.onresize = function(){
scrollTo(0, 0)
}
},


#3

#4

事件绑定在window对象上的啊,其他页面公用一个window对象,单页应用


#5

header和手机地址栏有什么关系?你是用了绝对定位?


#6

相对定位。VW, VH 布局,改成px布局,有些页面就好了,有些还是那样。
已经用setTimeout了。


#7

我也觉得应该是next那个,但是没用好,我再研究一下。谢谢。


#9

其他同事已经告诉你原因了。在实例销毁之前(beforeDestroy)去除 onresize事件。
①-- window.onresize=null;
②-- window.removeEventListener(‘resize’);


#10

不知道你的加载是通过什么 v-for吗?for的这个数据源是某个函数的返回值?还是直接for这个函数(过滤器)?
如果是一个返回值,也就是类似于每次都是for一个固定的数组data[] 。你可以监听一下这个v-for的数据源。只要他有变动,就执行某些操作, 写在watch里面。我经常这么干。。
watch =function(){
this.data=function(){
// dosomething
}
}
这就是给个思路,代码肯定跑不了- -。
1.每次的load的结果用一个data保存起来,
2.监听这个data,data变化了就在watch里面执行你要执行的操作代码。


#11

第一句说错了,是你的渲染。不是加载。。。