J'essaie de créer une application angular2 pour la production pour cela, je suis ce blog . Après ma compilation réussie ngc lorsque la compilation tsc a lieu, elle génère l'erreur ci-dessous indiquée dans l'image:
Après avoir cherché pendant un moment, j'ai trouvé ce blog qui explique le problème dans la section "La propriété de contexte" que je ne suis pas capable de comprendre correctement peut-être que cela vous donne une bonne idée de ce qui ne va pas. fondamentalement, lorsque nous rendons une variable privée, nous obtenons "ERREUR: la propriété est privée et accessible uniquement dans la classe" . Je ne comprends pas pourquoi cela arrive.
Veuillez nous aider pendant que nous nous cognons la tête dans ce problème depuis quelques jours.
angular
typescript
typescript-typings
angular2-aot
Sumit Khanduri
la source
la source
Réponses:
Pour un composant donné, tous ses membres (méthodes, propriétés) auxquels son modèle accède doivent être publics dans le scénario de compilation AOT. Cela est dû au fait qu'un modèle est transformé en classe TS. Une classe générée et un composant sont maintenant 2 classes distinctes et vous ne pouvez pas accéder aux membres privés inter-classes.
En bref: vous ne pouvez pas accéder aux membres privés dans vos modèles si vous souhaitez utiliser la compilation à l'avance.
Pour une meilleure explication https://github.com/angular/angular/issues/11422
la source
Peut-être qu'une autre réponse encore plus simple est:
PS lors de la compilation du
*.ts
code*.js
, AOT refuse de connecter les membres non publics avec le modèle HTML .la source
J'ai donc résolu ce problème, je vais rester court et simple. Pour résoudre ce problème, j'ai lu ce blog en profondeur. Comme dans la section " La propriété de contexte " La solution à ce problème est de ne pas utiliser ou de créer une variable privée si vous souhaitez l'utiliser directement dans la vue lorsque vous créez votre build avec AOT ( ie, Ahead Of Time ) pour production.
*par exemple *
output: La propriété '_initials' est privée et accessible uniquement dans la classe 'ThirdPartyComponent'.
Solution:
mettre
private _initials: string;
à jour ceci simplement_initials: string;
Pour cette réponse, Harish Gadiya m'aide, merci pour cela.
la source
_name
là-bas, il peut être le même que celui que vous utilisezthis.
et autre c'estname
une variable localethis.name=name;
this.name=name
dans leset name
est inf. recursionthis.
pour pointer vers le mondialname
n'est pas variable, c'est une propriété d'objet.this.name = name
déclenchera setter (set name(v){}
) sur cet objet. Tellement facile de le tester: blitzMaximum call stack size exceeded
J'ai obtenu ceci lorsque j'ai déclaré des injectables privés dans le constructeur:
Et les a utilisés dans le modèle:
La solution est:
la source
Cela fonctionne pour moi les gars: changez simplement le service en public.
Application en production !!
la source
ok voyez c'est vraiment un simple problème javascript es6, si vous devez garder le type de données privé, vous pouvez simplement le faire
la source
Si vous souhaitez utiliser le routeur en vue, veuillez le rendre public.
Par exemple:
Je l'ai oublié jusqu'à ce que Github CI m'envoie un mail d'avertissement.
la source