Hvordan ringe barnekomponentkontrollfunksjon / hjelper fra Parent Component Controller

Jeg har krav om å ringe en barnekontrollerfunksjon fra foreldrekontroller når hendelsen skjer på foreldresiden .

for f.eks.

ABC er overordnet komponent og DCE er underordnet komponent, denne underordnede komponenten har Span of Text-taggen og X-symbolet. når jeg klikker på x, tømmes verdien ved hjelp av barnekontroller. ABC-foreldrekomponent har skjemaelement og underordnet komponent er en av i form.

Mitt krav er å fjerne denne underordnede komponentverdien når du klikker på foreldrekomponentknappen.

her er under eksempelkoden for det jeg prøver fordi jeg ikke kan legge ut faktisk kode her

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

  • Med mindre du oppgir koden, er det vanskelig å hjelpe deg
  • Mohit, la til koden jeg kan ikke legge ut den opprinnelige koden, men jeg har gitt eksempler på det jeg prøvde å oppnå.

Svar

Behandlernavnet i underkomponenten din skal samsvare med det registrerte navnet i den overordnede komponenten. dvs. at behandleren i underordnet komponent skal være slik:

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

–UPDATE –

Jeg tror en bedre tilnærming for foreldre-til-barn-kommunikasjon er å bruke <aura:method> som oppført i lyndokumenter og her

For å gjøre dette, bør du definere en metode i underordnet komponent som dette:

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

Du bør da ha en id når du henviser den i foreldrekomponenten din slik:

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

Så i den klare metoden til den overordnede komponenten, bør du påberope barnemetoden slik:

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

Kommentarer

  • Den gjelder bare for komponentnivåhendelse, ikke for en applikasjonshendelse.
  • hmm at ' er sant. Jeg la ikke ' ikke merke til at dette er en applikasjonshendelse. @Raj_SFDC, hvorfor kan ' ikke gjøre begivenheten din til en komponenthendelse?

Svar

Programhåndteringsprogram bør ikke inneholde name attributt bare event og action attributt er nok som nevnt her .

Slik skal en applikasjonshendelse avfyres i din klare metode:

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

For mer info, se avsnittet om applikasjonshendelse i doc .

Kommentarer

  • Ikke hell med det også, min antagelse er at vi ikke kan håndtere hendelse hos barn fra foreldre. vær så snill bekreft
  • @Raj_SFDC vi kan skyte en søknadshendelse fra foreldre til barn. Når det er sagt, gjør du det feil. Jeg har oppdatert svaret mitt, se på det.
  • Jeg har ett spørsmål her ovenfra [$ A.get (" ec: clrValues ")], hvordan får attributtverdi.
  • refererer du til hendelsesparametere? I så fall kan du angi det ved hjelp av $A.get("e.c:clrValues").setParams({'message':'test'}) og utløse hendelsen, så i håndterermetoden kan du bruke $A.get("e.c:clrValues").getParam('message') for å få verdien tilbake.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *