2017-02-15 5 views
0

Я пытаюсь внедрить FormBuilder класс, как это в компонент:Почему DI для `FormBuilder` терпит неудачу, если используется как этот` частного фб: FormBuilder`

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

Однако это не удается, и я получаю ошибку:

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

Если изменить конструктор этой формы:

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

Это работает отлично. В чем проблема?

+0

FormBuilder не помеченный как @Injectable – Zyga

+0

@Zyga, это не требуется в соответствии к [этой статье] (https://blog.thoughtram.io/angular/2015/09/17/resolve-service-dependencies-in-angular-2.html), если FormBuilder ничего не вводит –

+0

Извините, кажется, что Ты прав. В подобной статье они вводят FormBuilder без проблем (https://blog.thoughtram.io/angular/2016/06/22/model-driven-forms-in-angular-2.html), поэтому, возможно, это проблема с настройкой, тогда ? Или версию Углового вы используете? – Zyga

ответ

2

У меня не было

"emitDecoratorMetadata": true 

в tsconfig.json и поэтому эта часть не была порождена 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);