Подключенный Vuejs хук в компоненте работает не так, как ожидалось

#javascript #vue.js #vuejs2 #vue-component

#javascript #vue.js #vuejs2 #vue-компонент

Вопрос:

Я использую смонтированный хук в компоненте и хочу загрузить диаграмму в виде панели мониторинга, как вы можете видеть ниже.

Скрипт панели мониторинга

 export default {
    name: 'Dashboard',
    mounted() {

        console.log(this.$el); //--> console output -> empty
        const self = this;
        this.$nextTick(function () {
            // some init codes for chart implementation
            console.log(self.$el); //--> console output -> empty also.
        }
    }
}
  

У меня есть файл App.vue для использования в качестве контейнера. Он имеет структуру шаблона по умолчанию (я имею в виду, ничего особенного).
Как понять, что компонент загружен?

Я думаю; mounted() хук срабатывает при App.vue загрузке. Но все еще DOM компонента панели мониторинга в это время не создан. Поэтому я решил использовать nextTick событие. Но он также действует как mounted() хук. Я немного сбит с толку.

Редактировать: Эта проблема возникает при F5 нажатии кнопки на клавиатуре.

Правка 2: App.vue

 <template>
    <section id="app" class="container-fluid">
        <div class="content">
            <router-view />
        </div>
    </section>
</template>
  

router.js

 import Vue from 'vue'
import Router from 'vue-router'
import Dashboard from './views/Dashboard.vue'

Vue.use(Router)

export default new Router({
  mode: 'history',
  routes: [
    { path: '/', component: Dashboard }
  ]
})
  

Комментарии:

1. вы зарегистрировали дочерний компонент? можете ли вы предоставить полный код для этого компонента и родительского компонента

2. @mooga отредактировал мой вопрос с помощью блоков кода.

Ответ №1:

this функция nextTick не является компонентом Vue. Вы можете попробовать использовать функцию arrow

 this.$nextTick(() => {
    // some init codes for chart implementation
    console.log(this.$el); 
}
  

или закрытие:

 var self = this
this.$nextTick(() => {
    // some init codes for chart implementation
    console.log(self.$el); 
}
  

Комментарии:

1. О, спасибо за исправление. Но все равно в нем null nextTick .

2. Есть ли у вас <template> тег в вашем компоненте Vue?

3. абсолютно да. Если не существует, компонент не работает.