Enciclopédia de Erros

Colisão de geração de ID de component

Ao criar components, o Angular gera um ID único de component para cada component. Isso é gerado usando os metadados do component Angular, incluindo, mas não limitado a: seletores, o número de host bindings, nomes de propriedades da classe, queries de view e content. Quando dois metadados de components são idênticos (frequentemente compartilhando o mesmo seletor), ocorrerá uma colisão de geração de ID.

IDs de components são usados internamente no Angular:

Para evitar problemas que podem ser causados pela colisão de ID de component, é recomendado resolvê-los conforme descrito abaixo.

Exemplo de uma colisão de ID de Component

@Component({  selector: 'my-component',  template: 'complex-template',})class SomeComponent {}@Component({  selector: 'my-component',  template: 'empty-template',})class SomeMockedComponent {}

Ter esses dois components definidos irá disparar uma colisão de geração de ID e durante o desenvolvimento um aviso será exibido.

Depurando o erro

A mensagem de aviso inclui o nome da classe dos dois components cujos IDs estão colidindo.

O problema pode ser resolvido usando uma das soluções abaixo:

  1. Altere o seletor de um dos dois components. Por exemplo, usando um pseudo-seletor sem efeito como :not() e um nome de tag diferente.
@Component({  selector: 'my-component:not(p)',  template: 'empty-template',})class SomeMockedComponent {}
  1. Adicione um atributo host extra a um dos components.
@Component({  selector: 'my-component',  template: 'complex-template',  host: {'some-binding': 'some-value'},})class SomeComponent {}