Vue 2.0
我有一个包含div的组件,使用v-once
指令来防止重新渲染。当URL参数发生变化时,同一组件会更新它显示的数据(即单击vue-router链接,更改组件中使用的url和参数)。
该组件成功地使用新数据(基于URL参数)重新呈现所有内容 除了 具有v-once
指令的div。该div不会刷新,重新加载或重新呈现。
我试图在数据发生变化时使用观察者和vm.$forceUpdate(),但这没有任何效果。
有没有办法强制整个组件重新渲染?特别是v-once
指令的部分?我希望组件在URL参数更改时重新呈现,但仍然不会在数据更改时重新呈现。
答案 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>