84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
Document {{i}}
我希望完成一个效果,当数据返回以后 进行渲染 然后浏览器的滚动条滚动到底部,但是上面这样实现不成功,我试了一下用 setTimeout是可以的,但是看文档说nextTick里面已经有了setTimeout ,上面的代码为什么不行?
更新:系统 osx 10.11.4chrome版本 50.0.2661.102 (64-bit) 测试无效火狐 , Safari有效。
走同样的路,发现不同的人生
不知道题主是用的什么环境和浏览器,我这边chrome测试是可以的,原样复制你的代码的.
问题过了很久,但是仍然想回答一波。这个问题不在于vue,vue1会优先使用MutationObserver,setTimeout只是一个回退替代的方案。所以问题在于的是chrome下MutationObserver配合window.scrollTo有些问题,应该是浏览器的问题,而非是vue的问题.大家可以根据下面这个例子进行一下测试,第一次进入页面时正常,但是在此基础上进行页面刷新时应该就会失效:
vue
vue1
MutationObserver
setTimeout
window.scrollTo
Test
今天也遇到类似的问题,就是发现当nextTick用在ready或者vue-router的data钩子里面的时候,其实并不能如我们所想的那样保证回调是在dom的数据渲染完毕之后再执行,找了很久的答案终于看到一个相关的:尤大大在vue-router的一个issue下面回复:
nextTick is intended to be used right after you modified some reactive data.
nextTick是计划在当你更改了某些响应式的数据时使用的。也就是说,nextTick应该被用在某些计算属性或者watch再或者某个按钮click事件绑定的methods当中。这时,nextTick才能保证你的数据更新完成之后再执行你绑定的函数.
计算属性
watch
某个按钮click事件绑定的methods
在Chrome Version 51.0.2704.106 (64-bit)里观察到同样问题,nextTick是用MutationObserver实现的,也许DOM变动还没完成?虽然document.body.scrollHeight的计算是正确的
按官网的说法,是应该在DOM渲染之后调用nextTick的回调,但事实就是,DOM还没渲染完成就执行了,所以用setTimeout吧。这个需求我也遇到过,有个不够优雅,但能用的方案,请参考:vueJs实现DOM加载完成之后自动下拉到底部
不知道题主是用的什么环境和浏览器,我这边chrome测试是可以的,原样复制你的代码的.
问题过了很久,但是仍然想回答一波。这个问题不在于
vue
,vue1
会优先使用MutationObserver
,setTimeout
只是一个回退替代的方案。所以问题在于的是chrome下MutationObserver
配合window.scrollTo
有些问题,应该是浏览器的问题,而非是vue
的问题.大家可以根据下面这个例子进行一下测试,第一次进入页面时正常,但是在此基础上进行页面刷新时应该就会失效:
今天也遇到类似的问题,就是发现当nextTick用在ready或者vue-router的data钩子里面的时候,其实并不能如我们所想的那样保证回调是在dom的数据渲染完毕之后再执行,
找了很久的答案终于看到一个相关的:尤大大在vue-router的一个issue下面回复:
nextTick是计划在当你更改了某些响应式的数据时使用的。
也就是说,nextTick应该被用在某些
计算属性
或者watch
再或者某个按钮click事件绑定的methods
当中。这时,nextTick才能保证你的数据更新完成之后再执行你绑定的函数.在Chrome Version 51.0.2704.106 (64-bit)里观察到同样问题,nextTick是用MutationObserver实现的,也许DOM变动还没完成?虽然document.body.scrollHeight的计算是正确的
按官网的说法,是应该在DOM渲染之后调用nextTick的回调,但事实就是,DOM还没渲染完成就执行了,所以用setTimeout吧。
这个需求我也遇到过,有个不够优雅,但能用的方案,请参考:vueJs实现DOM加载完成之后自动下拉到底部