36 votes

Angular 2 | Directives L'argument de type '{}' n'est pas assignable à l'utilisateur.

Je suis novice avec Angular 2. Je fais des tutoriels sur YouTube, mais tous les tutoriels ont la directives: la partie où je suis coincé.

app.component.ts

import { Component } from '@angular/core';
import { HeaderComponent } from './components/header/header.component'
@Component({
  selector: 'my-app',
  template: '<h1>Hello</h1><header></header>',
  directives: [HeaderComponent]
})
export class AppComponent { }

La sortie d'erreur est :

Argument of type '{ selector: string; template: string; directives: typeof HeaderComponent[]; }' is not assignable to parameter of type 'ComponentMetadataType'.at line 6 col 3

header.component.ts

import { Component } from '@angular/core';

@Component ({

  selector: 'header',
  template: '<h2>hit!</h2>'

})
export class HeaderComponent { }

Voici une capture d'écran de l'erreur enter image description here

0 votes

Quelle version d'angular ?

0 votes

Quelle version d'angular2 utilisez-vous ?

75voto

yurzui Points 85802

directives a été supprimée dans RC.6

Vous devriez le déplacer vers declarations propriété de votre NgModule décorateur

@NgModule({
  imports:      [ BrowserModule ],
  declarations: [ AppComponent, HeaderComponent ], <== here
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

0 votes

Cela a donc fonctionné pour moi. Est-ce que cela signifie que tous les composants doivent être listés dans l'AppModule maintenant ? Cela ne semble pas très modulaire si je dois lister chaque module au niveau global.

0 votes

@TommieJones Vous pouvez diviser vos composants en modules de fonctionnalités, puis les importer où vous le souhaitez.

0 votes

Ça a marché pour moi. Merci.

4voto

micronyks Points 4214

Si vous utilisez RC6 alors vous devez faire ce qui suit,

import { HeaderComponent } from './components/header/header.component' //<----added this line

@NgModule({
  imports:      [ BrowserModule ],
  declarations: [ AppComponent,HeaderComponent],                       //<----added HeaderComponent
  bootstrap:    [ AppComponent ]
})

1 votes

Comment puis-je savoir si j'utilise la RC6 ?

0 votes

Qu'est-ce que RC6, pourquoi utiliser des abréviations pour répondre à la question ?

4voto

Rajat Agrawal Points 33

Il s'agit d'un problème très courant auquel vous êtes confronté si vous êtes nouveau dans le domaine de la santé. angular2 et cette réponse est probablement destinée à ceux qui sont confrontés au même type de problème.

Tout d'abord, n'oubliez pas d'importer la classe du composant enfant (ici, HeadComponent) dans votre composant Root( app.component.ts ) comme suit:-

//inside app.component.ts
import{ HeadComponent} from'./components/header/header.component';

Vous devez alors le déplacer vers les déclarations dans app.module.ts suit:-

import{ TutorialsComponent} from'./components/header/header.component';
@NgModule({
    declarations: [
       AppComponent,HeadComponent]

Je suppose que ça devrait aider.

0voto

danday74 Points 15895

WebStorm m'a dit de rendre le constructeur protégé. C'est ce que j'ai fait. Cela a causé ce problème lors d'un redémarrage de webpack. La suppression du mot-clé protected l'a à nouveau réglé.

0voto

Anitha Points 1

Je suis également confronté au même problème.

Veuillez vérifier cette image d'erreur J'utilise angulaire7

J'ai inclus ce HeaderComponent dans le NgModule, mais cela ne fonctionne pas. erreur : Argument de type '{ selector : string ; directives : (typeof HomeComponent)[] ; template : string ; }' n'est pas affectable au paramètre de type 'Component'. Un objet littéral ne peut spécifier que des propriétés connues, et 'directives' n'existe pas dans le type 'Component'. .

import { HeaderComponent } from './components/header/header.component' 

@NgModule({
  imports:      [ BrowserModule ],
  declarations: [ AppComponent,HeaderComponent],                      
  bootstrap:    [ AppComponent ]

})``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X