
Até Stephen Fluin tradicionalmente lançar um novo lançamento e um artigo sobre os recursos do novo Angular, eu tentava empilhar tudo e responder à pergunta do que havia de novo?
Um dos recursos mais interessantes que estamos esperando há quase 2 anos é o Angular Ivy e, finalmente, o Angular 9 será compilado com o Ivy por padrão. Se você quiser mergulhar no interior do Angular Ivy, existem 2 vídeos do AngularConnect: sobre o Compiler e o Runtime .
Como sempre com a CLI Angular, você pode atualizar com bastante facilidade, um guia detalhado .
Verificação de tipo de modelo
O sinalizador strictTemplates será adicionado além do fullTemplateTypeCheck, ele funcionará apenas no Ivy. No modo completo será:
verificando a ligação de componentes e diretivas ao @Input
durante a verificação, o typescript strictNullChecks será verificado
verificação de tipos e diretrizes de componentes, incluindo genéricos
verificando o modelo no contexto de execução, por exemplo, dentro de * ngFor
verificando o tipo de evento $ event em componentes e diretivas, também ao animar
verificando os tipos corretos para referências locais de elementos DOM, por exemplo, quando document.createElement retornará uma tag
Tendo modelos de verificação de tipo tão rigorosos, às vezes é necessário desabilitá-la, por isso criamos $ any () nos quais a verificação não será executada.
Exemplo: {{$ any (person) .addresss.street}}
@ContentChildren
ContentChild Por padrão, só funcionará com filhos diretos
<comp> <div #bar> <!-- new runtime --> <div #foo></div> <!-- matches in old runtime --> </div> </comp>
Para fazer isso, você precisará cortar os descendentes da bandeira
@ ContentChildren ('foo', { descendentes : false}) foos : QueryList < ElementRef >
DI
Todas as classes que usam o DI Angular devem ter um decorador Angular, como @Directive()
ou @Injectable
(classes anteriormente não decoradas eram permitidas apenas no modo AOT ou se usadas pelo Inject). Por padrão, a CLI deve atualizá-los corretamente.
Para:
export class MyService {...} export class MyOtherService {...} export class MyThirdClass {...} export class MyFourthClass {...} export class MyFifthClass {...} @NgModule({ providers: [ MyService, {provide: SOME_TOKEN, useClass: MyOtherService},
Depois:
@Injectable() export class MyService {...} @Injectable() export class MyOtherService {...} export class MyThirdClass {...} export class MyFourthClass {...} export class MySixthClass {...}
Para:
{provide: MyToken}
Depois:
{provide: MyToken, useValue: undefined}
As entradas para diretivas (por exemplo, nome em <my-comp name = “”>) agora são definidas ao criar uma visualização antes da detecção de alterações (anteriormente todas elas foram definidas durante a detecção de alterações).
Um pouco mais interessante
Propriedades como host dentro de @Component
e @Directive
podem ser herdadas (anteriormente apenas propriedades com campos explícitos como @HostBinding eram herdadas).
O suporte ao HammerJS é fornecido por meio da importação do HammerModule (anteriormente ele sempre era incluído nos pacotes de trabalho, independentemente de o aplicativo usar o HammerJS).
Se um token for injetado com os @Host
ou @Self
, o injetor do módulo não procurará esse token (anteriormente, os tokens marcados com esses sinalizadores ainda seriam pesquisados no nível do módulo).
Ao acessar vários links locais no modelo com o mesmo nome, o primeiro é obtido (a última instância foi obtida anteriormente).
As diretivas usadas no módulo exportado (mas não exportadas por elas mesmas) são exportadas publicamente (anteriormente, o compilador registrava automaticamente a exportação privada com um alias para que pudesse usar seu conhecimento global para resolver conflitos)
Funções externas ou constantes externas nos metadados do decorador não são estaticamente resolvíveis (anteriormente, você poderia importar uma constante ou função de outro módulo compilado, por exemplo, de uma biblioteca e usar essa constante / função na definição do @NgModule
).
As referências de entrada direta nas diretivas acessíveis por links locais não são mais suportadas por padrão.
Se houver um atributo de classe não relacionado e uma ligação via [class], as classes do atributo não relacionado também serão adicionadas (anteriormente, a ligação através da classe reescreveu as classes no atributo não ligado).
Não é mais possível substituir os ganchos do ciclo de vida por zombarias nas instâncias de diretivas para teste (para fazer isso, altere os ganchos do ciclo de vida na própria diretiva).
Os tokens de injeção especiais (como TemplateRef ou ViewContainerRef) retornam uma nova instância sempre que solicitados (anteriormente, as instâncias eram vasculhadas se solicitadas a partir de nós semelhantes). Isso afeta principalmente os testes que comparam a identidade desses objetos.
A análise da ICU ocorre no tempo de execução, portanto, apenas texto, tags HTML e ligantes de texto são permitidos (diretivas anteriores também eram permitidas nas expressões da ICU).
Descontinuado
Alterações significativas na API são apresentadas aqui e o que já estava em Descontinuado será excluído.
Remoções de APIs obsoletas
E se isso não for suficiente, há um pouco mais .
Bem, esperamos o lançamento do Angular 9 após as férias de Natal =):
Para sua informação, tomei a decisão de realizar o lançamento do #Angular 9.0 até o próximo ano, para que todos nós possamos tirar uma folga nas próximas semanas. Boas festas e até 2020!
E, claro, assine o canal no telegrama @ngFanatic , onde serão publicadas mais notícias sobre a Angular.