Это чисто временная проблема.Вот что происходит ...
- Ваш родительский компонент создан.В настоящее время ему назначен пустой массив
place
(это тоже проблема, но я вернусь к этому позже).На этом этапе запускается асинхронный запрос Ваш родительский компонент создает экземпляр CardComponent
через свой шаблон
<card-component :card="place.card"></card-component>
, place
по-прежнему пустой массив, поэтому place.card
не определено
- Хук
CardComponent
created
работает, ведение журнала undefined
CardComponent
установлен и его mounted
хук работает (тот же результат регистрации)as created
) - Ваш родительский компонент смонтирован
- В какой-то момент после этого асинхронный запрос разрешается и заменяет
place
с пустого массива на объект, предположительно с card
property. - Новое свойство
card
передается в ваше CardComponent
, и оно реактивно обновляет отображаемое значение {{ card }}
в своем шаблоне.
Если вы хотителовить при изменении данных card
реквизит можно использовать beforeUpdate
hook
beforeUpdate () {
console.log(this.card)
}
Demo
Vue.component('CardComponent', {
template: 'card = {{ card }}
', props: [' card '], созданный () {console.log (' созданный: ', this.card)}, смонтированный () {console.log (' mount: ', this.card)}, beforeUpdate () {console.log ('beforeUpdate:', this.card)}}) new Vue ({el: '#app', data: {place: {}}, созданный () {setTimeout (() => {this.place = {карточка: 'Пиковый туз'}}, 2000)}})
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<div id="app">
<card-component :card="place.card" />
</div>
См. https://vuejs.org/v2/guide/instance.html#Lifecycle-Diagram
Если place
подразумевается как объект, вы не должны инициализировать его как массив.Кроме того, если ваш CardComponent
зависит от наличия данных, вы можете условно отобразить его.
Например,
data () {
return { place: null }
}
и
<card-component v-if="place" :card="place.card"></card-component>
then CardComponent
будет создан и смонтирован только после того, как place
будет иметь данные.