用vue router注册路由时component是用vue markdown loader解析md文件生成的
router.component = r =>
require.ensure([], () => r(require(`../docs/${router.name}.md`)));
页面结构如下:
<template>
<router-view :class="$style.view"></router-view>
<anchor-nav :anchos="textAnchors"></anchor-nav>
</template>
现在需要在router-view更新的时候,获取更新后router-view里面dom一些元素的id,用来做锚点导航,
document.querySelectorAll("h2")
要怎么做?
现在已经尝试的方法:
1.父组件mouted和update时都调用一次document.querySelectorAll("h2"),获取这个值时没问题,但是将这个值传给上面例子中anchor-nav时页面会卡死,不知道是什么原因;
2.利用vue router的导航守卫
但是根据官网完整的导航解析流程:
1导航被触发。
2在失活的组件里调用离开守卫。
3调用全局的 beforeEach 守卫。
4在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。
5在路由配置里调用 beforeEnter。
6解析异步路由组件。
7在被激活的组件里调用 beforeRouteEnter。
8调用全局的 beforeResolve 守卫 (2.5+)。
9导航被确认。
10调用全局的 afterEach 钩子。
11触发 DOM 更新。
12用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。
无法在dom更新后在获取到router view中dom的值。
请教各位大佬有没有比较好的方法。个人还想到一种方法是给解析生成的组件定义mouted,update这些方法,但是不知道该怎么做=_=....
已解决。
参考Vuejs技术揭秘
vue中数据的变化到 DOM 的重新渲染是一个异步过程,发生在下一个 tick。
如果我们的某些方法去依赖了数据修改后的 DOM 变化,我们就必须在 nextTick 后执行。比如下面的伪代码:
然后就可以在nextTick中获取到最新的dom进行操作了。