0

我在与嵌套组件通信时遇到问题。我希望一个组件能够在嵌套组件的 controller.js(或助手)中运行一个方法。我已经尝试了这两个事件和通过但没有运气。这是示例标记:

<!-- 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!');
  }
})

这不起作用。我尝试了与我在超级超级组件上的嵌套组件上放置的完全相同的代码,它运行良好。超级超级组件收到了事件。但是嵌套组件不能。我认为这与仅冒泡的事件有关(尽管文档确实说这仅适用于组件事件,而不是应用程序事件)。

所以我在网上阅读的另一个选项是使用 . 我试过这样做,但这也不适用于与嵌套组件对话。

父组件如何触发嵌套组件上的方法?

谢谢

4

1 回答 1

0

这个问题在这里得到了回答: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 解决这个问题!

于 2016-02-10T00:33:35.327 回答