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.