Estoy tratando de crear una aplicación angular2 para producción, por eso estoy siguiendo este blog . Después de mi compilación exitosa de ngc cuando se lleva a cabo la compilación de tsc , 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 ser que te dé una buena idea de lo que está sucediendo mal. básicamente, cuando hacemos una variable privada, obtenemos "ERROR: La propiedad es privada y solo se puede acceder a ella dentro de la clase" . No entiendo por qué viene.
Por favor ayúdenos ya que nos estamos dando golpes de cabeza con este problema durante los últimos días.
angular
typescript
typescript-typings
angular2-aot
Sumit Khanduri
fuente
fuente
Respuestas:
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 entre clases.
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
fuente
Quizás otra respuesta aún más simple es:
PD: al compilar el
*.ts
código*.js
, AOT se niega a conectar miembros no públicos con la plantilla HTML .fuente
Así que arreglé este problema, lo mantendré breve y simple. Para arreglar esto, leí este blog profundamente. Como en la sección " La propiedad de contexto " La solución para este problema es que no use o cree una variable privada si desea usarla en la vista directamente cuando esté creando su compilación con AOT ( es decir, Ahead Of Time ) para producción.
*por ejemplo *
salida: la propiedad '_initials' es privada y solo se puede acceder a ella dentro de la clase 'ThirdPartyComponent'.
Solución:
actualiza esto
private _initials: string;
para simplemente_initials: string;
Para esta respuesta, Harish Gadiya me brindó algo de ayuda, así que gracias por eso.
fuente
_name
allí, puede ser el mismo que usted usathis.
y otroname
es una variable localthis.name=name;
this.name=name
en elset name
inf. recursividadthis.
para señalar el globalname
no es variable, es propiedad del objeto.this.name = name
activará setter (set name(v){}
) en ese objeto. Tan fácil de probar: blitzMaximum call stack size exceeded
Obtuve esto cuando declaré inyectables privados en el constructor:
Y los usó en la plantilla:
La solucion es:
fuente
Esto funciona para mí, chicos: simplemente cambie el servicio a público.
App trabajando en producción !!
fuente
De acuerdo, esto es realmente un problema simple de javascript es6, si debe mantener el tipo de datos en privado, simplemente puede hacer esto
fuente
Si desea utilizar el enrutador a la vista, hágalo público.
P.ej:
Lo pasé por alto hasta que Github CI me envía un correo de advertencia.
fuente