Vue.js强制重新呈现包含v-once指令的组件

时间:2016-11-29 22:54:11

标签: javascript vue.js vue-component vue-router

Vue 2.0

我有一个包含div的组件,使用v-once指令来防止重新渲染。当URL参数发生变化时,同一组件会更新它显示的数据(即单击vue-router链接,更改组件中使用的url和参数)。

该组件成功地使用新数据(基于URL参数)重新呈现所有内容 除了 具有v-once指令的div。该div不会刷新,重新加载或重新呈现。

我试图在数据发生变化时使用观察者和vm.$forceUpdate(),但这没有任何效果。

有没有办法强制整个组件重新渲染?特别是v-once指令的部分?我希望组件在URL参数更改时重新呈现,但仍然不会在数据更改时重新呈现。

2 个答案:

答案 0 :(得分:3)

v-once的文档相同,如果已将其应用于元素,则即使更改了使用的变量,也不会更新该元素。来自文档:

  

仅渲染元素和组件一次。在随后的重新渲染中,元素/组件及其所有子元素将被视为静态内容并被跳过。这可用于优化更新性能。

如果要更新元素,则不应使用v-once指令。

答案 1 :(得分:3)

可以通过包围容器中的v-once组件,然后触发组件重新呈现来解决此用例。

我能够通过在容器内对相关组件使用:key="$route.params.id"来触发组件重新渲染。

即。

<div id="container-component">
  <custom-component :key="$route.params.id"></custom-component>
</div>