2016-10-17 2 views
4

Довольно нового для ви Js здесь,событие пользовательское события из основного экземпляра ви, слушать из компонента

Просто хотят знать, если это возможно, чтобы испустить пользовательское событие из основного экземпляра ви (родительский) и компоненты могли слушать это пользовательское событие и действовать соответственно, когда это событие срабатывает?

Я хочу вызвать пользовательское событие на экземпляре vue , установленное функция жизненного цикла, тогда все компоненты могут инициализировать себя.

ex.

Основной экземпляр вю

new Vue({ 
    el : '#main-app', 
    mounted : function() { 
     this.$emit('init-app'); 
    } 
}); 

Тогда на различных компонентах, он может слушать для «Init-приложение» пользовательское событие затем действовать соответственно при срабатывании или излучается.

Не знаете, как это сделать coz в vue js прослушиватели событий прикреплены к тэгам html? может ли прослушиватель событий или функция в компоненте запускаться только путем испускания события от родителя?

Примечание: Я использую VUE JS 2.0.3 и мои компоненты являются глобальными, они не встраивать

отл.

Vue.component('my-component', { 
    template: '#component-template' 
}); 

Я мог бы добавить еще несколько компонентов позже.

Заранее спасибо.

+0

Я хочу, чтобы коды инициализации каждого компонента были самими компонентами, я не хочу помещать их в основной экземпляр vue. – Jplus2

+0

Вы думаете об использовании $ on и $ emit, как описано в документах? –

+0

Снова я довольно новичок в vue js, не могли бы вы дать мне пример о том, как добиться того, чего я хочу, исходя из моего вопроса выше? не знаю, как реализовать то, что я хочу, показывая некоторые примеры кода, действительно полезно. – Jplus2

ответ

4

Правильный способ инициализации ваших дочерних компонентов - использовать крючок жизненного цикла created: для каждого из ваших дочерних компонентов.

Причина: Вполне возможно, что ваш дочерний компонент не может быть создан при отправке события init-app из родительского компонента. Таким образом, он никогда не будет инициализирован.

Дополнительная информация о событиях: Если вы отправляете событие из дочернего компонента в родительский компонент, вы должны использовать this.$parent.$emit("my-event-code") и получать его на родительской стороне как this.$on("my-event-code"). Я выяснил это недавно после нескольких часов, пытаясь использовать различные методы.

Итак, если вы пытаетесь отправить событие init-app от родителя к дочернему, возможно, вам придется прослушивать дочерний компонент как this.$parent.$on("init-app", ...). Я еще не проверил это, это мое настоящее понимание.

+0

Спасибо за ответ @Mani, можете ли вы предоставить образец кода вашего решения? Кстати, я обновил вопрос, я не смог сообщить, что мои компоненты являются глобальными компонентами, а не встроенными в основной экземпляр vue. – Jplus2

+1

@ Jplus2 Я не понимал, что у вас есть глобальные компоненты, которые не связаны друг с другом. В этом случае у вас есть только один вариант - создайте ** шину событий **, как описано здесь: http://vuejs.org/guide/components.html # Non-Parent-Child-Communication – Mani

+0

Спасибо @Mani, вы привели меня к решению, в основном компоненты vue действительно имеют события жизненного цикла, похожие на экземпляры vue, это было глупо, поскольку я не тестировал его. В документах, хотя явно не упоминалось о компонентах, имеющих крючки жизненного цикла, в любом случае я использовал крюк * установленный *, поскольку он запускается после визуализации компонента. – Jplus2

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