Aufrufen der untergeordneten Komponentencontrollerfunktion / -hilfe vom übergeordneten Komponentencontroller

Ich muss eine untergeordnete Controllerfunktion vom übergeordneten Controller aufrufen, wenn das Ereignis auf der übergeordneten Seite auftritt

für z. B.

ABC ist eine übergeordnete Komponente und DCE ist eine untergeordnete Komponente. Diese untergeordnete Komponente verfügt über ein Tag für die Textspanne und ein X-Symbol. Wenn ich auf x klicke, wird der Wert mit dem untergeordneten Controller gelöscht. Die übergeordnete ABC-Komponente verfügt über ein Formularelement, und die untergeordnete Komponente ist eine der Formulare.

Meine Anforderung besteht darin, den Wert dieser untergeordneten Komponente zu löschen, wenn auf die Schaltfläche der übergeordneten Komponente geklickt wird.

Hier ist die unten Beispielcode von dem, was ich versuche, weil ich hier keinen tatsächlichen Code posten kann

ParentComponent.cmp

 <aura:registerEvent name="clrValues" type="c:ClearValues"/> <div> <c:ChildComponent textValue="test"/> <ui:button label="Save"/> <ui:button label="Clear" press="{!c.clear}"/> </div> </aura:component> 

ParentController.js

({ clear : function(component, event, helper) { var evtFire = component.getEvent("clrValues"); evtFire.fire(); } }) 

ClearValues.evt

<aura:event type="APPLICATION" description="Event template" /> 

ChildComponent.cmp

<aura:component > <aura:handler name="setValues" event="c:ClearValues" action="{!c.clear}"/> <aura:attribute name="textValue" type="String" default="test"/> <div > <ui:inputText label="Expense Name" value="{!v.textValue}" aura:id="input1"/> </div> </aura:component> 

ChildController.js

({ clear : function(component, event, helper) { helper.clearValues(component,event); } }) 

Kommentare

  • Wenn Sie den Code nicht angeben, ist es schwierig, Ihnen zu helfen.
  • Mohit hat den Code hinzugefügt. Ich kann meinen ursprünglichen Code nicht veröffentlichen, aber ich habe ein Beispiel gegeben, was ich erreichen wollte.

Antwort

Der Handlername in Ihrer untergeordneten Komponente sollte mit dem registrierten Namen in der übergeordneten Komponente übereinstimmen. Das heißt, der Handler in der untergeordneten Komponente sollte folgendermaßen aussehen:

 <aura:handler name="clrValues" event="c:ClearValues" action="{!c.clear}"/> 

–UPDATE –

Ich denke, ein besserer Ansatz für die Eltern-Kind-Kommunikation besteht darin, <aura:method> zu verwenden, wie in Blitzdokumente und hier

Dazu müssen Sie eine Methode in definieren Untergeordnete Komponente wie folgt:

 <aura:method name="sampleMethod" action="{!c.clear}" access="PUBLIC"> 

Sie sollten dann eine ID haben, wenn Sie sie in Ihrer übergeordneten Komponente wie folgt referenzieren:

 <c:ChildComponent textValue="test" aura:id="cComp"/> 

Dann sollten Sie in der Löschmethode der übergeordneten Komponente die untergeordnete Methode wie folgt aufrufen:

 var childCmp = component.find("cComp") childCmp.sampleMethod(); 

Kommentare

  • Dies gilt nur für Ereignisse auf Komponentenebene, nicht für ein Anwendungsereignis.
  • hmm, dass ' ist wahr. Ich habe ' nicht bemerkt, dass dies ein Anwendungsereignis ist. @Raj_SFDC, warum können Sie ' Ihr Ereignis nicht zu einem Komponentenereignis machen?

Antwort

Anwendungsereignishandler sollte nicht das Attribut name enthalten, sondern nur das event und action reicht aus, wie bereits erwähnt hier .

So sollte ein Anwendungsereignis in Ihrer eindeutigen Methode ausgelöst werden:

({ clear : function(component, event, helper) { $A.get("e.c:clrValues").fire(); } }) 

Weitere Informationen finden Sie im Abschnitt zum Anwendungsereignis im -Dokument .

Kommentare

  • Auch damit kein Glück, ich gehe davon aus, dass wir Ereignisse im Kind von Eltern nicht behandeln können. Bitte bestätigen Sie
  • @Raj_SFDC, dass wir ein Anwendungsereignis vom Elternteil zum Kind auslösen können. Wenn dies gesagt ist, tun Sie dies falsch. Ich habe meine Antwort aktualisiert, sehen Sie es sich bitte an.
  • Ich habe hier eine Frage von oben [$ A.get (" ec: clrValues ")], wie man den Attributwert erhält.
  • beziehen Sie sich auf Ereignisparameter? Wenn Sie dies mit $A.get("e.c:clrValues").setParams({'message':'test'}) festlegen und das Ereignis auslösen können, können Sie in der Handler-Methode , um den Wert zurückzugewinnen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.