Hur man ringer barnkomponentkontrollfunktion / hjälpare från Parent Component Controller

Jag måste ringa en barnkontrollfunktion från föräldrakontrollen när händelsen inträffar på föräldersidan .

för t.ex.

ABC är överordnad komponent och DCE är underkomponent, den här underkomponenten har en text med tagg och X-symbol. när jag klickar på x rensas värdet med hjälp av barnkontrollen. ABC-överordnad komponent har formulärelement och underordnad komponent är en av i form.

Mitt krav är att rensa detta underordnade komponentvärde när man klickar på föräldrakomponentknappen.

här är under exempelkoden för vad jag försöker eftersom jag inte kan posta verklig kod här

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

Kommentarer

  • Om du inte anger koden är det svårt att hjälpa dig
  • Mohit, lade till koden, jag kan inte lägga upp min ursprungliga kod, men jag har gett ett exempel på det jag försökte uppnå.

Svar

Hanterarens namn i din underkomponent ska matcha det registrerade namnet i den överordnade komponenten. dvs hanteraren i underkomponenten ska vara så här:

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

–UPDATE –

Jag tror att ett bättre tillvägagångssätt för kommunikation mellan förälder och barn är att använda <aura:method> som anges i blixtdokument och här

För att göra detta bör du definiera en metod i underordnad komponent så här:

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

Du bör då ha ett id när du hänvisar det till din föräldrakomponent så här:

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

I den tydliga metoden för den överordnade komponenten bör du åberopa underordnad metoden så här:

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

Kommentarer

  • Det gäller endast för komponentnivåhändelse, inte för en applikationshändelse.
  • hmm att ' är sant. Jag märkte inte ' att detta är en applikationshändelse. @Raj_SFDC, varför kan ' inte göra ditt evenemang till en komponenthändelse?

Svar

Programhändelsehanteraren bör inte innehålla name attribut bara event och action attribut räcker som nämnts här .

Så här ska en applikationshändelse avfyras i din tydliga metod:

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

Mer information finns i avsnittet om applikationshändelse i doc .

Kommentarer

  • Inte lycka till med det också, jag antar att vi inte kan hantera händelse hos barn från förälder. vänligen bekräfta
  • @Raj_SFDC vi kan avfyra en applikationshändelse från föräldern till barnet. Med detta sagt gör du det felaktigt. Jag har uppdaterat mitt svar, titta på det.
  • Jag har en fråga här ovanifrån [$ A.get (" ec: clrValues ")], hur får du attributvärde.
  • hänvisar du till händelseparametrar? Om så är fallet kan du ställa in det med $A.get("e.c:clrValues").setParams({'message':'test'}) och aktivera händelsen, i hanteringsmetoden kan du använda $A.get("e.c:clrValues").getParam('message') för att få tillbaka värdet.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *