Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Využij akce až 80 % zdarma při nákupu e-learningu - více informací. Zároveň pouze tento týden sleva až 80 % na e-learning týkající se Swift
Avatar
Samo
Člen
Avatar
Samo:14.11.2020 19:34

Potrebujem aby komponenta A zavolala ngOnInit() funkciu v ktorej si vytiahne data s DB a zmeni hodnoty v html formulari.
V komponente B kliknem na tlacidlo ulozit do DB a nasledne zavolam this.A.ngOnInit();

Zkusil jsem: Zavolanie this.A.ngOnInit(); z komponenty B funguje ked si pozriem console.log, nacita sa spravna hodnota, ale nezmeni tuto hodntu v html.
Ked zavolam document.loca­tion.reload(); tak to funguje, ale nechcem volat reload celej stranky.

Chci docílit: Po stlaceni tlacidla save v komponente B sa zmenia hodnoty v komponente A.

 
Odpovědět
14.11.2020 19:34
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Samo
Petr Štechmüller:14.11.2020 20:16

Ahoj, manuální volání ngOnInit() je dost nešťastné řešení.
Lepší bude, když uděláš v komponentě B EventEmitter a nastavíš ho jako výstupní parametr. Na ten si navěsíš handler v komponentě A, kde provedeš potřebnou změnu.

Nahoru Odpovědět
14.11.2020 20:16
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:15.11.2020 10:42

Angular nepouzivam. Ale mozna to tam funguje podobne jako request.

V js, kdyz stahujes data, tak se vola synchronni nebo asyn. request. To je jakysi kus programu, ktery bezi mimo hlavni program. Aspon teda je lepsi pocitat s asynchronitou. V tom requestu se sleduje udalost onload a status=200 (stranka byla stazena). Kdyz to nastane, tak se vola callback funkce nebo nic. Podle toho, co s tim dal chces dela.
https://developer.mozilla.org/…/HTTP/Status
https://developer.mozilla.org/…LHttpRequest
Principialne to funguje tedy asi takto:

<iframe src="" onload="funkce2(this);">
function funkce1(url)
{
document.iframe[0].src = url;
}
function funkce2(iframe)
{
data = iframe.(innercontent).document.body[0].innerHTML;
}

funkce1(url) // spusti cely proces

Cili, funkce 2 se zavola az v okamziku, kdyz skonci stahovani stranky v iframu. Cili, neni mozne to napsat takto

data = funkce1(url);
funkce2(data);

// ale musi se to napsat jako callback funkce te prvni a v te prvni zajistit, aby dostala data, kdyz uz jsou stazena.
funkce1(url, funkce2); // funkce1(url, fn) {... onload=function(window[fdn](data);

Za leta se se js hodne vyviji a tak maji na strankach mozily nekolik verzi, jak s tim pracovat. Mozna pro tebe nejsrozumitelnejsi podobne tem slovum o emiteru (v js objekt, ktery emituje/vygeneruje udalost, k zachytavani udalosti slouzi addEventListener) by mohlo byt toto:

function transferComplete(event)
{
data = event.data;
...
}

var oReq = new XMLHttpRequest();

oReq.upload.addEventListener("progress", updateProgress);
oReq.upload.addEventListener("load", transferComplete);
oReq.upload.addEventListener("error", transferFailed);
oReq.upload.addEventListener("abort", transferCanceled);

oReq.open();

Verim, ze to pujde zapsat nejak podobne.

 
Nahoru Odpovědět
15.11.2020 10:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.