2016-11-29 1 views
3

Vue 2,0сила Vue.js пересборка компоненты, который содержит v однократный директиву

У меня есть компонент, который содержит DIV с помощью v-once директивы для предотвращения повторного рендеринга. Этот же компонент обновляет данные, которые он отображает при изменении параметров URL (например, клика vue-router, изменение URL-адреса и параметра, используемого в компоненте).

Компонент успешно повторно делает все с новыми данными (на основе URL Params) кроме ДИВ с v-once директивы. Этот div не обновляется, не перезагружается или не перерисовывается.

Я попытался использовать наблюдателя и vm.$forceUpdate(), когда данные изменяются, но это не оказало никакого эффекта.

Есть ли способ заставить весь компонент повторно визуализировать? В частности, часть с директивой v-once? Я хотел бы, чтобы компонент повторно отображал изменение URL-адреса, но все же не перерисовывал при изменении данных.

ответ

3

Как указано в документации к v-once, если вы применили его к элементу, этот элемент не будет обновлен, даже если переменная будет изменена. от документации:

Оденьте элемент и компонент только один раз. При последующем повторном рендеринге элемент/компонент и все его дочерние элементы будут рассматриваться как статический контент и пропущены. Это можно использовать для оптимизации производительности обновлений.

Если вы хотите обновить элемент, вы не должны использовать директиву v-once.

+0

Вы правы, что это ожидаемое поведение. Однако я бы хотел обойти это поведение и заставить повторную обработку, несмотря на 'v-once'. После повторной рендеринга мне по-прежнему потребуется поведение «v-once» на обновленном компоненте. – Jason

+0

@Jason Итак, что же делать, когда вы хотите переделать и когда нет? – Saurabh

+0

компонент должен повторно отобразить на изменении параграфа url, а не повторять рендер при обновлении данных. – Jason

2

Этот вариант использования можно решить, окружив компонент v-once в контейнере, а затем запустив повторную визуализацию компонентов.

Мне удалось вызвать повторную визуализацию компонента, используя :key="$route.params.id" на соответствующем компоненте из контейнера.

т.е.

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