Ich versuche, eine Angular2-Anwendung für die Produktion zu erstellen, für die ich diesem Blog folge . Nach meiner erfolgreichen ngc- Kompilierung, wenn die tsc-Kompilierung stattfindet, wird der folgende Fehler im Bild generiert:
Nachdem ich eine Weile gesucht hatte, fand ich diesen Blog, der das Problem im Abschnitt "Die Kontexteigenschaft" erklärt, den ich nicht richtig verstehen kann. Vielleicht gibt er Ihnen eine gute Vorstellung davon, was falsch passiert. Wenn wir eine Variable privat machen, erhalten wir im Grunde "FEHLER: Eigenschaft ist privat und nur innerhalb der Klasse zugänglich" . Ich verstehe nicht, warum es kommt.
Bitte helfen Sie uns, während wir uns in den letzten Tagen mit diesem Problem beschäftigen.
angular
typescript
typescript-typings
angular2-aot
Sumit Khanduri
quelle
quelle
Antworten:
Für eine bestimmte Komponente müssen alle Mitglieder (Methoden, Eigenschaften), auf die über ihre Vorlage zugegriffen wird, im AOT-Kompilierungsszenario öffentlich sein. Dies liegt daran, dass eine Vorlage in eine TS-Klasse umgewandelt wird. Eine generierte Klasse und eine Komponente sind jetzt zwei separate Klassen, und Sie können nicht klassenübergreifend auf private Mitglieder zugreifen.
Kurz gesagt: Sie können in Ihren Vorlagen nicht auf private Mitglieder zugreifen, wenn Sie die Kompilierung im Voraus verwenden möchten.
Zur besseren Erklärung https://github.com/angular/angular/issues/11422
quelle
Vielleicht ist eine andere noch einfachere Antwort:
PS beim Kompilieren des
*.ts
Codes*.js
, AOT Müll nicht-öffentliche Mitglieder mit dem verbinden , HTML - Vorlage.quelle
Also habe ich dieses Problem behoben. Ich werde es kurz und einfach halten. Um dies zu beheben, habe ich diesen Blog gründlich gelesen . Wie im Abschnitt " Die Kontexteigenschaft " Die Lösung für dieses Problem besteht darin, dass Sie keine private Variable verwenden oder erstellen, wenn Sie sie direkt in der Ansicht verwenden möchten, wenn Sie Ihren Build mit AOT ( dh Ahead Of Time ) für erstellen Produktion.
*zum Beispiel *
Ausgabe: Die Eigenschaft '_initials' ist privat und nur innerhalb der Klasse 'ThirdPartyComponent' zugänglich.
Lösung:
Aktualisieren Sie dies
private _initials: string;
einfach_initials: string;
Für diese Antwort hilf mir Harish Gadiya , danke dafür.
quelle
_name
werden, es kann das gleiche sein, das Sie verwenden,this.
und andere istname
eine lokale Variablethis.name=name;
this.name=name
in derset name
ist inf. Rekursionthis.
auf die globalename
ist nicht variabel, es ist Objekteigenschaft.this.name = name
löst setter (set name(v){}
) für dieses Objekt aus. So einfach zu testen: blitzMaximum call stack size exceeded
Ich habe dies erhalten, als ich private Injectables im Konstruktor deklariert habe:
Und verwendet sie in der Vorlage:
Die Lösung ist:
quelle
Das funktioniert bei mir: Wechseln Sie einfach den Service in die Öffentlichkeit.
App arbeitet in der Produktion !!
quelle
ok, das ist wirklich ein einfaches Javascript es6-Problem. Wenn Sie den Datentyp privat halten müssen, können Sie dies einfach tun
quelle
Wenn Sie den Router in der Ansicht verwenden möchten, machen Sie ihn bitte öffentlich.
Z.B:
Ich habe es übersehen, bis Github CI mir eine Warnmail schickte.
quelle