web-dev-qa-db-fra.com

La propriété 'X' est privée et accessible uniquement dans la classe 'xyzComponent'

J'essaye de construire une application angular2 pour la production pour cela, je suis ce blog . Après ma ngc compilation réussie lorsque la compilation tsc est générée ci-dessous erreur affichée dans l'image:

enter image description here

Après avoir cherché pendant un moment, j'ai trouvé ceci blog qui explique le problème dans la section "La propriété de contexte" dont je ne suis pas capable de bien comprendre peut-être que cela vous donnera une bonne idée de ce qui ne va pas. En gros, lorsque nous rendons une variable privée, nous obtenons "ERREUR: la propriété est privée et uniquement accessible au sein de la classe" . Je ne comprends pas pourquoi ça arrive.

Veuillez nous aider, car nous nous cognons la tête dans ce problème depuis quelques jours.

61
Sumit Khanduri

Pour un composant donné, tous ses membres (méthodes, propriétés) auxquels son modèle a accédé doivent être publics dans le scénario de compilation AOT. Cela est dû au fait qu'un modèle est transformé en une 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 entre classes.

En bref: vous ne pouvez pas accéder aux membres privés dans vos modèles si vous souhaitez utiliser une compilation en avance.

Pour une meilleure explication https://github.com/angular/angular/issues/11422

87
harish gadiya

Peut-être une autre réponse encore plus simple est:

Les gars n'appellent pas les méthodes privées, champs ou propriétés du HTML :)


P.S. lors de la compilation du code *.ts en *.js, AOT refuse de connecter les membres non publics avec le HTML modèle.

23

J'ai donc résolu ce problème, je vais rester bref et simple. Pour résoudre ce problème, j'ai lu ceci blog profondément. Comme dans la section " La propriété de contexte " La solution à ce problème est la suivante: N'utilisez pas ou ne créez pas de variable privée si vous voulez l'utiliser directement dans la vue lorsque vous créez votre build avec AOT (, c'est-à-dire, Ahead Of Time ) pour la production.

* par exemple *

// component.ts
@Component({
  selector: 'third-party',
  template: `
    {{ _initials }}
  `
})
class ThirdPartyComponent {
  private _initials: string;
  private _name: string;

  @Input()
  set name(name: string) {
    if (name) {
      this._initials = name.split(' ').map(n => n[0]).join('. ') + '.';
      this._name = name;
    }
  }
}

sortie: La propriété '_initials' est privée et accessible uniquement dans la classe 'ThirdPartyComponent'.

Solution:

met à jour ce private _initials: string; en simplement _initials: string;

Pour cette réponse Harish Gadiya donnez-moi de l'aide afin merci pour cela.

11
Sumit Khanduri

J'ai eu ceci quand j'ai déclaré les injectables privés dans le constructeur:

constructor(private service: SpecificObjectService) { }

Et utilisé dans le template:

*ngFor="let pd of service.listSpecificObject "

La solution est:

constructor(public service: SpecificObjectService) { }
3
TiyebM

Cela fonctionne pour moi les gars: changez simplement le service au public.

constructor(public service: SpecificObjectService) { }

App travaillant dans la production !!

0
Carlos Valdes