Компоненты молнии Aura.js: запуск методов вложенного / дочернего компонента из супер / родительского компонента?
У меня проблемы с подключением к вложенному компоненту. Я хотел бы, чтобы компонент мог запускать метод в controller.js (или помощнике) для nested-компонента. Я пробовал оба события и через и не повезло. Вот пример разметки:
<!-- myEvent.evt -->
<aura:event type="APPLICATION">
</aura:event>
<!-- super-component -->
<aura:component>
<aura:registerEvent name="myEventName" type="c:myEvent"/>
<c:my_Nested_Component />
<ui:button press="{!fireEvent}"
<aura:component>
//super-component_controller.js
({
fireEvent: function(component){
var myEvent = component.getEvent("myEventName");
myEvent.fire();
console.log('event fired');
}
})
------------------------------------------
<!-- nested-component -->
<aura:component>
<aura:handler name="myEventName" event="c:c:myEvent" action="{!c.gotEvent}" />
<aura:component>
//nested-component_controller.js
({
gotEvent: function(component, event){
console.log('received event!');
}
})
Это не работает. Я попробовал тот же самый точный код, который я поместил во вложенный компонент в супер-супер-компонент, и он работал отлично. Супер-супер-компонент получил событие. Но вложенный компонент не способен. Я полагал, что это было связано с событиями, только всплывающими (хотя документация говорит, что это только в случае с событиями Компонента, а не событиями приложения).
Таким образом, другой вариант, который я читаю онлайн, использует. Я пытался сделать это, но это также не работало для разговора с вложенным компонентом.
Как родительский компонент может вызвать метод во вложенном компоненте?
Спасибо
1 ответ
Ответ на этот вопрос здесь: https://salesforce.stackexchange.com/questions/108544/lightning-components-firing-a-nested-child-components-methods-from-the-super-p
Проблема заключалась в том, что я использовал component.getEvent() вместо $A.get(), который требуется для событий уровня приложения. Кроме того, имя зарегистрированного события - это не способ ссылки на событие из обработчика, а использование его фактического имени файла, например:
//super-component_controller.js
({
fireEvent: function(component){
var myEvent = $A.get("e.c:myEvent");
myEvent.fire();
console.log('event fired');
}
})
<!-- nested-component -->
<aura:component>
<aura:handler event="c:myEvent" action="{!c.gotEvent}" />
<aura:component>
Спасибо @MohithShrivastava за выяснение этого!