Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

252
Vistas
La clase usa características angulares pero no está decorada. Agregue un decorador angular explícito

Tengo algunos componentes como CricketComponent , FootballComponent , TennisComponent , etc. Todas estas clases tienen algunas propiedades comunes: TeamName, teamSize, players etc., que son @Input() .

Ahora creé una clase BaseComponent , definí todas estas propiedades allí y esta clase baseComponent se ampliará con cricket/football/tennis/etcComponents.

baseComponent.ts

 export class BaseComponent { @Input() TeamName: string; @Input() teamSize: number; @Input() players: any; }

CricketComponent.ts

 @Component({ selector: 'app-cricket', templateUrl: './cricket.component.html', styleUrls: ['./cricket.component.scss'] }) export class cricketComponent extends BaseComponent implements OnInit { constructor() { super(); } ngOnInit(): void { } }

Estoy recibiendo este error:

ERROR en src/app/base-screen.ts:4:14 - error NG2007:

La clase usa características angulares pero no está decorada. Agregue un decorador angular explícito.

over 4 years ago · Santiago Trujillo
6 Respuestas
Responde la pregunta

0

Deberá agregar un decorador @Component a esa clase base (que probablemente también debería declararse abstract ).

Este es el mínimo con el que puede salirse con la suya en Angular 9:

 @Component({ template: '' }) export abstract class BaseComponent { @Input() teamName: string; @Input() teamSize: number; @Input() players: any; }

Para Angular 10+, vea esta respuesta .

over 4 years ago · Santiago Trujillo Denunciar

0

Si bien la respuesta aceptada es correcta al usar @Component , una desventaja menor es que requiere que DI pueda resolver todos los tipos de argumentos del constructor. Entonces, si su constructor de clase base toma una constante/literal, por ejemplo, una enumeración, como indicador, tendrá que configurar un proveedor/token DI correspondiente solo para que se compile.

Sin embargo, también puede resolver NG2007 usando el decorador @Directive en su lugar, que no requiere compatibilidad DI

over 4 years ago · Santiago Trujillo Denunciar

0

Desde Angular 10, puede solucionar este problema agregando el decorador @Injectable() a su clase base abstracta de esta manera:

 @Injectable() export abstract class BaseComponent { @Input() teamName: string; @Input() teamSize: number; @Input() players: any; }
over 4 years ago · Santiago Trujillo Denunciar

0

Tuve una situación similar al ejecutar ng serve . Recibía ese error para las bibliotecas de terceros y para todos mis componentes Angular a pesar de que estaban decorados.

Si tiene este problema, consulte esta respuesta para Angular 11 'error NG2007: la clase está usando funciones de Angular pero no está decorada'. Pero la clase está decorada.

over 4 years ago · Santiago Trujillo Denunciar

0

Para estos errores: NG6001: la clase 'XComponent' aparece en las declaraciones de NgModule 'AppModule', pero no es una directiva, un componente o una canalización. Elimínelo de las declaraciones de NgModule o agregue un decorador angular apropiado.

NG2003: No hay token de inyección adecuado para el parámetro 'A' de la clase 'Y'.

NG2007: la clase usa características angulares pero no está decorada. Agregue un decorador angular explícito.

Puede estar escribiendo la nueva clase entre la declaración @Component y la clase Component.

ex.

// exportar clase Y{ // }

 @Component({ selector: 'app-X', templateUrl: './X.component.html', styleUrls: ['./X.component.css'] }) export class XComponent implements OnInit { todos : Y[] = [ new Y(1 ), new Y(2 ), new Y(3 ) ] constructor() { } ngOnInit(): void { } }

//exportar clase Y{ //}

es decir, si tiene más de una clase. digamos clase XComponent y Clase Y, donde la clase Y se usa en la clase XComponent, luego escriba el código para la clase Y arriba de @Component({}) o debajo de la clase XComponent

over 4 years ago · Santiago Trujillo Denunciar

0

Ver también: Falta la migración del decorador @Directive()/@Component()

Antes:

 export class BaseComponent { @Input() TeamName: string; @Input() teamSize: number; @Input() players: any; }

Después:

 @Directive() export class BaseComponent { @Input() TeamName: string; @Input() teamSize: number; @Input() players: any; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda