2017-02-02 2 views
5

Я ищу способ прочитать высоту (clientHeight) компонента после того, как его слоты отображаются (в DOM), а затем задают результат к реактивным данным для дальнейших вычислений.В vue.js 2 измерьте высоту компонента после рендеринга слотов

Согласно документации updated крючка:

DOM компонента будет обновлен, когда этот крючок называется, так что вы можете выполнять DOM-зависимые операции здесь

... Это нормально до тех пор, но в документации также указано:

Однако в большинстве случаев вам следует избегать изменения состояния внутри крюка

... Кажется, что это не запрещено устанавливать реактивные данные в крюке updated.

Результат очень нестабильный, иногда я получаю clientHeight после отображения слотов, а иногда и перед их визуализацией.

Кажется, что «обновленный» крюк вызывается в нужный момент, но изменение реактивных данных в этом крючке не работает систематически.

тест: https://jsfiddle.net/4wv9f052/5/

ответ

2

Использование nextTick

Vue.nextTick(() => { 
    this.height = this.$el.clientHeight; 
}); 

https://jsfiddle.net/4wv9f052/9/

+0

Но почему он не работает с обновляется? – Saurabh

+0

@Saurabh Поскольку Vue манипулирует DOM асинхронно – CodinCat

+0

Спасибо за ответ, более подробно здесь: https://vuejs.org/v2/guide/reactivity.html#Async-Update-Queue –

Смежные вопросы