Mám požadavek na volání funkce podřízeného řadiče z nadřazeného řadiče, kdykoli dojde k události na nadřazené straně .
např.
ABC je nadřazená komponenta a DCE je podřízená komponenta, tato podřízená komponenta má značku Span of Text a symbol X. když kliknu na x, vymaže se hodnota pomocí podřízeného ovladače. Nadřazená komponenta ABC má prvek Form a podřízená komponenta je jednou z forem.
Mým požadavkem je vymazat hodnotu této podřízené komponenty, když kliknete na tlačítko nadřazené komponenty.
zde je níže ukázkový kód toho, co se snažím, protože zde nemohu zveřejnit skutečný kód
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); } })
Komentáře
- Pokud neposkytnete kód, je těžké vám pomoci.
- Mohit, přidal kód, nemohu zveřejnit svůj původní kód, ale dal jsem ukázku, čeho jsem se snažil dosáhnout.
Odpověď
Název obslužné rutiny ve vaší podřízené komponentě by měl odpovídat registrovanému názvu v nadřazené komponentě. tj. obslužná rutina v podřízené komponentě by měla být taková:
<aura:handler name="clrValues" event="c:ClearValues" action="{!c.clear}"/>
–UPDATE –
Myslím, že lepším přístupem pro komunikaci mezi rodiči je použití <aura:method>
jak je uvedeno v bleskové dokumenty a zde
Chcete-li to provést, měli byste definovat metodu v podřízená komponenta, jako je tato:
<aura:method name="sampleMethod" action="{!c.clear}" access="PUBLIC">
Měli byste mít ID, když jej odkazujete do své nadřazené komponenty takto:
<c:ChildComponent textValue="test" aura:id="cComp"/>
Pak byste v čisté metodě nadřazené komponenty měli vyvolat podřízenou metodu takto:
var childCmp = component.find("cComp") childCmp.sampleMethod();
Komentáře
- Platí pouze pro událost na úrovni komponenty, nikoli pro událost aplikace.
- hmm, že ' je pravda. Nevšiml jsem si ', že se jedná o událost aplikace. @Raj_SFDC, proč ' nemůžete z události udělat komponentní událost?
Odpovědět
Obslužná rutina události aplikace by neměla obsahovat atribut name
pouze event
a action
je dost, jak je uvedeno zde .
Takto by měla být spuštěna událost aplikace ve vaší jasné metodě:
({ clear : function(component, event, helper) { $A.get("e.c:clrValues").fire(); } })
Další informace najdete v sekci o aplikačních událostech v dokumentu .
Komentáře
- S tím také nemám štěstí, můj předpoklad je, že nemůžeme zvládnout událost v dítěti od rodiče. prosím potvrďte
- @Raj_SFDC můžeme vystřelit událost aplikace z rodiče na dítě. S tím bylo řečeno, že děláte nesprávně. Aktualizoval jsem svou odpověď, podívejte se na ni.
- Mám zde jednu otázku shora [$ A.get (" ec: clrValues ")], jak získat hodnotu atributu.
- odkazujete na parametry události? pokud ano, můžete je nastavit pomocí
$A.get("e.c:clrValues").setParams({'message':'test'})
a spustit událost, pak v metodě obsluhy můžete použít$A.get("e.c:clrValues").getParam('message')
získat hodnotu zpět.