Компоненты молнии 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 за выяснение этого!

Другие вопросы по тегам