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.