world versiones starter hello guide app typescript angular

typescript - versiones - "Privado" y "público" en componente angular



install angular (2)

@drewmoore proporciona una buena respuesta en que lo privado / público se reduce a la intención. Pero hay algunas cosas más a tener en cuenta al usar valores privados inyectados:

Si queremos emitir TypeScript como salida del proceso de compilación de AoT, debemos asegurarnos de que accedemos solo a los campos públicos en las plantillas de nuestros componentes **

Si no agrego privado antes de foo , loadBar y text , creo que son públicos por defecto.

export class RandomComponent { @Input() foo: string; @Output() loadBar = new EventEmitter(); text: string; }

¿Hay algún caso de uso cuando son public en el componente?

Por razones de encapsulación / seguridad, ¿debería agregar siempre private para todos ellos como a continuación?

export class RandomComponent { @Input() private foo: string; @Output() private loadBar = new EventEmitter(); private text: string; }

Gracias


Hay mucho que decir en respuesta a esta pregunta, estos son los primeros pensamientos que saltaron a mi mente:

En primer lugar, tenga en cuenta que lo private es solo una construcción en tiempo de compilación: no se puede aplicar en tiempo de ejecución (consulte here y here para una discusión relevante). Como tal, por favor, desactívese de cualquier noción de ser private útil de alguna manera por razones de seguridad. Eso simplemente no es de lo que se trata.

Se trata de la encapsulación, y cuando tiene un campo o método en su componente que desea encapsular en él, dejando en claro que no debe accederse desde ningún otro lugar, entonces debe hacerlo private : eso es lo private para: Indica tu intención de que lo que sea que te hayas puesto no se debe tocar desde fuera de la clase.

Lo mismo ocurre con el public : también es una construcción solo en tiempo de compilación, por lo que el hecho de que los miembros de la clase sean public por defecto, si bien es cierto, tiene exactamente cero significado en tiempo de ejecución. Pero cuando tiene un miembro que tiene la intención explícita de exponer al mundo exterior como parte de la API de su clase, debe hacerlo public para indicar esta intención: para eso es public .

Todo esto es aplicable a Typecript en general. En Angular específicamente, existen casos de uso definitivamente válidos para tener miembros públicos en clases de componentes: por ejemplo, al implementar el patrón container/component (también conocido como smart/dumb ), con niños "tontos" inyectando padres "inteligentes" mediante inyección de constructor, Es extremadamente importante comunicar su intención sobre lo que los miembros de los padres deben y no deben tocar los niños: de lo contrario, no se sorprenda cuando vea a esos niños tontos jugando en el gabinete de licores de sus padres.

Entonces, mi respuesta a tu pregunta:

¿Debo agregar siempre privado para todos ellos como a continuación?

es un enfático no . No siempre debe agregar private porque al hacerlo no cumple con el propósito de la palabra clave, porque ya no indica ninguna intención si la coloca en todas partes: es mejor que no la coloque en ninguna parte.