angular - switch - ng-model
La propiedad ''X'' es privada y solo es accesible dentro de la clase ''xyzComponent'' (4)
Así que arreglé este problema, lo mantendré breve y simple. Para solucionar esto, leí este blog profundamente. Como en la sección " La propiedad de contexto " La solución para este problema es que no use ni cree una variable privada si desea usarla directamente en la vista cuando esté creando su compilación con AOT ( es decir, con anticipación ) para producción.
*por ejemplo *
// 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;
}
}
}
salida: la propiedad ''_initials'' es privada y solo es accesible dentro de la clase ''ThirdPartyComponent''.
Solución:
actualizar este
private _initials: string;
simplemente
_initials: string;
Por esta respuesta, me brindó ayuda, así que gracias por eso.
Estoy tratando de construir una aplicación angular2 para producción para eso estoy siguiendo este blog . Después de mi compilación exitosa de ngc cuando se realiza la compilación tsc , se genera el siguiente error que se muestra en la imagen:
Después de buscar por un tiempo, encontré este blog que explica el problema en la sección "La propiedad de contexto" , que no puedo entender correctamente, puede darles una buena idea de lo que está sucediendo mal. Básicamente, cuando convertimos una variable en privada, obtenemos "ERROR: la propiedad es privada y solo es accesible dentro de la clase" . No entiendo por qué viene.
Ayúdenos amablemente mientras estamos golpeando nuestra cabeza en este problema durante los últimos días.
Obtuve esto cuando declaró los inyectables privados en el constructor:
constructor(private service: SpecificObjectService) { }
Y los usé en la plantilla:
*ngFor="let pd of service.listSpecificObject "
La solucion es:
constructor(public service: SpecificObjectService) { }
Para un componente dado, todos sus miembros (métodos, propiedades) a los que accede su plantilla deben ser públicos en el escenario de compilación AOT. Esto se debe al hecho de que una plantilla se convierte en una clase TS. Una clase generada y un componente son 2 clases separadas ahora y no puede acceder a miembros privados de clase cruzada.
En resumen: no puede acceder a miembros privados en sus plantillas si desea utilizar la compilación anticipada.
Para una mejor explicación https://github.com/angular/angular/issues/11422
Quizás otra respuesta aún más simple es:
Los chicos no llaman métodos privados, campos o propiedades desde el HTML :)
PS al compilar el código
*.ts
a
*.js
,
AOT
niega a conectar miembros no públicos con la plantilla
HTML
.