Vue以v-once

时间:2018-05-16 20:34:37

标签: vue.js vuejs2 vue-component nuxt.js

这个想法如下:

我有一个包含此模板的组件:

<span class="message" v-once>
    {{ headline }}
</span>

我在标题文本上有v-once指令,因为当组件实际在实际环境中使用时,标题文本无法更改。

现在,我正在构建一个工具,我们可以在其中查看所有组件的详细信息。使用此工具,我在页面上有一个Message输入,允许用户修改组件中看到的文本。只要v-once不存在,这种方法就可以正常工作。

出于优化目的,我希望有v-once指令,但我只需要在我的工具中重写一次。我希望我可以使用$forceUpdate(),但它没有做到这一点(可能仍在考虑v-once)。

有没有办法实现这个目标?如果没有,我可以离开v-once,但会很好。

1 个答案:

答案 0 :(得分:0)

有趣的问题。我不认为您应该尝试使用v-once指令刷新组件,因为正如您提到的使用目的是渲染一次并将该组件视为静态内容,这样您的组件就会得到更好的表现。

来自docs:

  

在Vue中渲染纯HTML元素的速度非常快,但有时您可能会有一个包含大量静态内容的组件。在这些情况下,您可以确保它只被评估一次,然后通过将v-once指令添加到根元素来缓存,如下所示:

<div v-once>
    <h1>Terms of Service</h1>
    ... a lot of static content ...
</div>

因此,您可以使用计算属性来获得更好的性能,因为它们是基于它们的依赖关系缓存的,来自docs:

  

计算属性仅在其某些依赖项发生更改时才会重新计算。这意味着只要消息没有改变,对reversedMessage计算属性的多次访问将立即返回先前计算的结果,而不必再次运行该函数。

最后的想法:如果您的组件将或可能更新数据元素(并且您希望您的应用程序显示这些更改),则不应使用v-once指令。