2017-02-15 1 views
0

Je suis en train d'injecter FormBuilder classe comme ceci dans le composant:DI pour `FormBuilder` tombe en panne si elle est utilisée comme ceci` fb privé: FormBuilder`

@Component({ 
    ... 
}) 
export class TaskComponent implements OnInit { 
constructor(private fb: FormBuilder) {} 

Cependant, il échoue et je reçois l'erreur:

(SystemJS) Can't resolve all parameters for TaskComponent: (?).↵ Error: Can't resolve all parameters for TaskComponent: (?).

Si je change le constructeur de ce formulaire:

constructor(@Inject(FormBuilder) fb: FormBuilder) { } 

Il fonctionne très bien. Quel est le problème?

+0

FormBuilder est pas marqué comme @Injectable – Zyga

+0

@Zyga, ce n'est pas nécessaire selon à [cet article] (https://blog.thoughtram.io/angular/2015/09/17/resolve-service-dependencies-in-angular-2.html) si FormBuilder n'injecte rien –

+0

Désolé, il semble que tu as raison. Dans un article similaire, ils injectent FormBuilder sans problème (https://blog.thoughtram.io/angular/2016/06/22/model-driven-forms-in-angular-2.html) alors peut-être que c'est un problème d'installation ? Ou la version d'Angular que vous utilisez? – Zyga

Répondre

2

Je n'ai pas

"emitDecoratorMetadata": true 

dans tsconfig.json et donc cette partie n'a pas été générée par tsc:

TaskComponent = __decorate([ 
    core_1.Component({ 
     moduleId: module.id, 
     selector: 'task', 
     templateUrl: 'task.component.html', 
     styleUrls: ['task.component.css'] 
    }), 
    __metadata("design:paramtypes", [forms_1.FormBuilder]) 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
], TaskComponent);