Jeg har krav om at ringe til en underordnet controller-funktion fra overordnet controller, når begivenheden sker i forældresiden .
for f.eks.
ABC er overordnet komponent og DCE er underordnet komponent, denne underordnede komponent har Span of Text-tag og X-symbol. når jeg klikker på x, ryddes værdien ved hjælp af underordnet controller. ABC-forældrekomponent har formelement, og underordnet komponent er en af i form.
Mit krav er at rydde denne underordnede komponentværdi, når der klikkes på forældrekomponentknappen.
her er under eksempelkode for hvad jeg prøver, fordi jeg ikke kan sende den aktuelle 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
- Medmindre du angiver koden, er det svært at hjælpe dig
- Mohit, tilføjede koden, jeg kan ikke sende min oprindelige kode, men jeg har givet eksemplet, hvad jeg forsøgte at opnå.
Svar
Handlernavnet i din underordnede komponent skal matche det registrerede navn i den overordnede komponent. dvs. at handler i underordnet komponent skal være sådan:
<aura:handler name="clrValues" event="c:ClearValues" action="{!c.clear}"/>
–UPDATE –
Jeg tror, at en bedre tilgang til forældre-til-barn-kommunikation er at bruge <aura:method>
som angivet i lyndokumenter og her
For at gøre dette skal du definere en metode i underordnet komponent som denne:
<aura:method name="sampleMethod" action="{!c.clear}" access="PUBLIC">
Du skal derefter have et id, når du henviser det inde i din overordnede komponent som denne:
<c:ChildComponent textValue="test" aura:id="cComp"/>
Derefter skal du i den klare metode til overordnet komponent påberåbe sig underordnet metode som denne:
var childCmp = component.find("cComp") childCmp.sampleMethod();
Kommentarer
- Det gælder kun for hændelse på komponentniveau, ikke for en applikationshændelse.
- hmm at ' er sandt. Jeg har ikke ' bemærket, at dette er en applikationsbegivenhed. @Raj_SFDC, hvorfor kan ' ikke gøre din begivenhed til en komponentbegivenhed?
Svar
Programhændelseshåndterer bør ikke indeholde name
-attribut kun event
og action
attribut er nok som nævnt her .
Sådan skal en applikationshændelse affyres i din klare metode:
({ clear : function(component, event, helper) { $A.get("e.c:clrValues").fire(); } })
For mere information, se afsnittet om applikationsbegivenhed i doc .
Kommentarer
- Intet held med det også, min antagelse er, at vi ikke kan håndtere begivenhed i barn fra forælder. bekræft venligst
- @Raj_SFDC vi kan affyre en ansøgningshændelse fra forældren til barnet. Når det er sagt, gør du det forkert. Jeg har opdateret mit svar, se på det.
- Jeg har et spørgsmål her ovenfra [$ A.get (" ec: clrValues ")], hvordan få attributværdi.
- henviser du til begivenhedsparametre? Hvis det er tilfældet, kan du indstille det ved hjælp af
$A.get("e.c:clrValues").setParams({'message':'test'})
og affyre begivenheden, så i håndteringsmetoden kan du bruge$A.get("e.c:clrValues").getParam('message')
for at få værdien tilbage.