2017-07-16 33 views
5

umieścić skupić się na elemencie składnika w dev narzędzi i może zrobić co następuje:Angular: Jak uzyskać zależność od komponentu za pośrednictwem konsoli?

ng.probe($0) 

aby uzyskać specjalny przedmiot „DebugElement”. Teraz możemy uzyskać jego wtryskiwacz:

ng.probe($0).injector 

teraz chciałbym uzyskać zależność, która jest zdefiniowana na tym komponencie. Dependancja jest zdefiniowana jako klasa, więc powinienem zrobić coś takiego:

ng.probe($0).injector.get(MyService) 

ALE! Usługa nie jest zdefiniowana w zakresie konsoli. Jeśli robię to ciąg znaków:

ng.probe($0).injector.get('MyService') 

oczywiście to też nie działa.

Próbuję wykonać odwrotną inżynierię na ReflectiveInjector.get, ale na razie nie ma szczęścia. Jakieś pomysły?

+0

@yurzui, zrobisz to odpowiedź z jakiegoś wyjaśnienia? :) –

Odpowiedz

3

Musimy przekazać token do metody injector.get, ponieważ została zadeklarowana. Nie możemy użyć łańcucha, jeśli zadeklarowaliśmy klasę jako token.

kątowa utrzymuje dostawców zgłaszanych w ramach komponentu w ngfactory Plunker

function View_App_Host_0(_l) { 
    return jit_viewDef0(0,[(_l()(),jit_elementDef1(0,null,null,2,'my-app',[],null,null, 
     null,jit_View_App_02,jit__object_Object_3)),jit_providerDef4(4608,null,jit_MyService5, 
     jit_MyService5,[]),jit_directiveDef6(49152,null,0,jit_App7,[],null,null)],null, 
     null); 
} 

i wykorzystuje elementInjector uzyskać zależność.

enter image description here

DebugElement dostaje informacje na temat tokenów przewidzianych do bieżącego węzła

get providerTokens(): any[] { 
    const tokens: any[] = []; 
    if (this.elDef) { 
    for (let i = this.elDef.index + 1; i <= this.elDef.index + this.elDef.childCount; i++) { 
     const childDef = this.elView.def.nodes[i]; 
     if (childDef.flags & NodeFlags.CatProvider) { 
     tokens.push(childDef.provider !.token); 
     } 
     i += childDef.childCount; 
    } 
    } 
    return tokens; 
} 

Po zadeklarowaliśmy dostawcę w ciągu providers tablica składnika metadanych token staje się dostępna w providerTokens tablicy.

Więc możemy uzyskać zależność pisząc

ng.probe($0).injector.get(ng.probe($0).providerTokens 
    .find(x => x.name === 'MyService')) 

Zobacz także

+0

zobaczyłem twój komentarz i po prostu pomyślałem, że odpowiem rano.) –