
Hasta que Stephen Fluin lanzó tradicionalmente un nuevo lanzamiento y un artículo sobre las características del nuevo Angular, traté de agrupar todo y responder a la pregunta de ¿qué hay de nuevo?
Una de las características más interesantes que hemos estado esperando durante casi 2 años es Angular Ivy, y finalmente Angular 9 se compilará con Ivy de forma predeterminada. Si quieres sumergirte en el interior de Angular Ivy, hay 2 videos de AngularConnect: sobre Compiler y Runtime .
Como siempre con la CLI angular, puede actualizar fácilmente, una guía detallada .
Verificación de tipo de plantilla
Se agregará el indicador estricto de plantillas además de fullTemplateTypeCheck, solo funcionará en Ivy. En modo completo será:
comprobar el enlace de componentes y directivas a @Input
al verificar, se marcará mecanografiado estricto
comprobación de tipos de componentes y directivas, incluidas las genéricas
comprobar la plantilla en el contexto de ejecución, por ejemplo, dentro de * ngFor
comprobar el tipo de eventos $ event en componentes y directivas, también al animar
comprobar los tipos correctos de referencias locales de elementos DOM, por ejemplo, cuando document.createElement devolverá una etiqueta
Al tener un tipo de verificación tan estricto en las plantillas, a veces es necesario deshabilitar esta verificación, por lo que se nos ocurrió $ any () en el que la verificación no se realizará.
Ejemplo: {{$ any (persona) .addresss.street}}
@ContentChildren
ContentChild Por defecto solo funcionará con hijos directos
<comp> <div #bar> <!-- new runtime --> <div #foo></div> <!-- matches in old runtime --> </div> </comp>
Para hacer esto, deberá cortar los descendientes de la bandera
@ ContentChildren ('foo', { descendientes : false}) foos: QueryList < ElementRef >
DI
Todas las clases que usan Angular DI deben tener un decorador angular, como @Directive()
o @Injectable
(las clases previamente sin decorar solo se permitían en modo AOT o si se usaban mediante Inject). Por defecto, la CLI debería actualizarlos correctamente.
Para:
export class MyService {...} export class MyOtherService {...} export class MyThirdClass {...} export class MyFourthClass {...} export class MyFifthClass {...} @NgModule({ providers: [ MyService, {provide: SOME_TOKEN, useClass: MyOtherService},
Después:
@Injectable() export class MyService {...} @Injectable() export class MyOtherService {...} export class MyThirdClass {...} export class MyFourthClass {...} export class MySixthClass {...}
Para:
{provide: MyToken}
Después:
{provide: MyToken, useValue: undefined}
Las entradas para las directivas (por ejemplo, el nombre en <my-comp name = "">) ahora se configuran al crear una vista antes de la detección de cambios (anteriormente todos se configuraron durante la detección de cambios).
Algo mas interesante
Se pueden heredar propiedades como el host dentro de @Component
y @Directive
(anteriormente solo se heredaban las propiedades con campos explícitos como @HostBinding).
El soporte de HammerJS se proporciona a través de la importación HammerModule (anteriormente siempre se incluía en los paquetes de trabajo independientemente de si la aplicación usaba HammerJS).
Si el token se inyecta con el @Host
o @Self
, entonces el inyector del módulo no busca este token (anteriormente, los tokens marcados con estos indicadores aún se buscarían en el nivel del módulo).
Al acceder a varios enlaces locales en la plantilla con el mismo nombre, se toma el primero (la última instancia se tomó antes).
Las directivas que se usan en el módulo exportado (pero no se exportan por sí mismas) se exportan públicamente (anteriormente, el compilador registraba automáticamente la exportación privada con un alias para que pudiera usar su conocimiento global para resolver conflictos)
Las funciones externas o las constantes externas en los metadatos del decorador no se pueden resolver de forma estática (anteriormente se podía importar una constante o función de otro módulo compilado, por ejemplo, de una biblioteca, y usar esta constante / función en su definición @NgModule
).
Las referencias de entrada directa en directivas accesibles a través de enlaces locales ya no son compatibles de forma predeterminada.
Si hay un atributo de clase no relacionado y un enlace a través de [clase], también se agregarán las clases del atributo no relacionado (anteriormente, el enlace a través de las clases reescritas en el atributo no vinculado).
Ya no es posible sobrescribir ganchos de ciclo de vida con simulacros en instancias de directivas para pruebas (para hacer esto, cambie los ganchos de ciclo de vida en la propia directiva).
Los tokens de inyección especiales (como TemplateRef o ViewContainerRef) devuelven una nueva instancia cada vez que se solicitan (anteriormente, las instancias se revolvían si se solicitaban desde nodos similares). Esto afecta principalmente las pruebas que comparan la identidad de estos objetos.
El análisis de ICU se produce en tiempo de ejecución, por lo que solo se permiten texto, etiquetas HTML y carpetas de texto (anteriormente, las directivas también se permitían dentro de las expresiones de ICU).
En desuso
Aquí se presentan cambios significativos en la API y se eliminará lo que ya estaba en desuso.
Eliminaciones de API obsoletas
Y si esto no es suficiente, entonces hay un poco más .
Bueno, esperamos el lanzamiento de Angular 9 después de las vacaciones de Navidad =):
Para su información, tomé la decisión de mantener la versión #Angular 9.0 hasta el próximo año para que todos nosotros y usted podamos tomar un descanso en las próximas semanas. ¡Felices fiestas y nos vemos en 2020!
Y, por supuesto, suscríbase al canal en el telegrama @ngFanatic donde se publicarán más noticias sobre Angular.