【发布时间】:2019-09-05 19:51:09
【问题描述】:
背景:
我正在使用 Nuxt 构建一个 SSR 网站。我想运行一个脚本到fix some typography issues(标题中的孤立文本)。在渲染 DOM 之前,我不能这样做。我怎样才能实现这个函数一次,让它在每个页面的 DOM 被渲染后运行?它可以在路由器中,也可以在 Nuxt 布局中,或其他地方。
我尝试过的:
-
在我的
layout.vue中,Mounted()仅在第一次加载时运行(如预期的那样),添加$nextTick似乎对此没有影响。甚至对于从真实网络服务器提供的生成的静态页面也是如此。 -
在我的
layout.vue中,使用 Vue 的Updated()似乎永远不会触发。我认为这意味着 Nuxt 正在阻碍。 -
使用
app.router.afterEach(),该函数在每次路由更改(包括第一次加载)时运行,但在渲染 DOM 之前,它变得毫无价值。 -
如果我将
Vue.nextTick()添加到.afterEach()中,该函数会在路径更改之前在当前页面上运行(您可以看到它闪烁),但在此之前不会运行。
有效但看起来很愚蠢的方法:
将函数放在每个页面的Mounted() 块中。
mounted: function(){
this.$nextTick(function () {
const tm = new TypeMate(undefined, { selector: 'h2, h3, p, li' });
tm.apply();
})
},
但这似乎是个坏主意,尤其是在我们添加页面时。我错过了什么?有没有聪明的方法来做到这一点? Nuxt 的文档对于其中的一些内容几乎毫无用处。
【问题讨论】:
标签: javascript vue.js vue-router nuxt.js