Jak volat funkci podřízeného řadiče komponent / pomocníka z nadřazeného řadiče komponent

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *