Mehrere Instanzen der eckigen 4-Anweisung, die von einer Komponente aufgerufen wurden, die die Eingabewerte enthält

9

Ich habe eine Komponente in Winkel 4, die dreimal aufgerufen wird. In Template-Metadaten habe ich ein div mit einer Direktive mit einigen Bindings wie dieser.

%Vor%

this.cOptions ändern für jede Instanz der Komponente, dann in der Direktive habe ich dies:

%Vor%

Das Problem ist, dass console.log(this.cOptions); immer dasselbe Objekt druckt, auch wenn die Komponente cOptions mit verschiedenen Werten in ngOnInit Methode des Compnents gesetzt hat.

Haben Sie eine Ahnung, was falsch ist?

    
xzegga 25.04.2017, 21:18
quelle

3 Antworten

3

Die Bindung Ihrer Komponenteneigenschaft [cOptions]="dataChart" sieht nicht gut aus, da Ihr dataChart noch nicht einmal definiert ist. Es sollte wie [DIRECTIVE_PROPERTY]="COMPONENT_PROPERTY" sein und Ihre COMPONENT_PROPERTY ist noch nicht einmal in SGComponent komponentenklasse definiert.

Ihre Komponentenklasse sollte etwa so aussehen:

%Vor%     
Ashwani 11.01.2018 15:16
quelle
0

@Ashwani weist auf ein gültiges Problem mit Ihrem Code hin. Die Art und Weise, wie Ihre Vorlage die Verbindung herstellt, wird niemals an den SGDirective -Eingabe weitergegeben.

Ein anderes potentielles Problem, mit dem Sie möglicherweise konfrontiert sind, hat mit dem Code gServ zu tun. Wenn gServ ein Singleton ist (was wahrscheinlich der Fall ist) und das gleiche Objekt an jedes SGComponent s zurückgibt, dann haben alle SGDirective s den gleichen Wert. Eine einfache Möglichkeit, dies zu testen, ist {{Options | json}} in die Vorlage SGComponent einzufügen.

Um eine neue Instanz des Dienstes gServ für jede SGComponent zu erstellen, können Sie den Metadaten providers ein @Component -Array hinzufügen. Es würde so aussehen:

%Vor%     
Isaac 17.01.2018 21:34
quelle
0

Sie haben wahrscheinlich den gleichen Rückgabewert bei this.gServ.objectMerge) (Sie können es testen, ohne den Service aufzurufen und jedes einzelne von Ihnen erstellte Objekt zu übergeben)

%Vor%

Wenn das der Fall ist, ist Ihr Problem, dass gServ an der gleichen rootComponent bereitgestellt wird. mit eckigen, Service Provider auf der gleichen rootComponent sind Singleton.

Und benutze den gleichen Typ in deiner Direktive und deiner Komponente !!

    
nicearma 17.01.2018 22:00
quelle