0

我有以下指令。

在 ngOnInit 中,this.word 和 this.components 都是“未定义的”。

谁能解释我为什么?

import { Directive , Input, Output, ViewContainerRef, ComponentRef, DynamicComponentLoader, EventEmitter, OnInit, NgModule} from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { Widget } from '../widget.model';
import { CommentComponent } from './comment.component';


@Directive({selector: 'widget-factory'})
export class WidgetFactory {
  @Input() name: any;
  @Input() id: Number;

  @Output() loaded = new EventEmitter();

  private components: { 'Comment': CommentComponent };
  private word: "hello";

  constructor(
    private _dcl: DynamicComponentLoader,
    private _elementRef: ViewContainerRef
  ) {

  }

  ngOnInit() {
    // Get the current element 
    console.log(this.word);
    let component: any;
    //if(this[name] === 'Comment') {
      component = CommentComponent
    //}
    this._dcl.loadNextToLocation(CommentComponent, this._elementRef);
    console.log(this.name);

  }
}

深受启发: 在 Angular 2 中输出组件数组

4

2 回答 2

2
private word: "hello";

这定义了一个名为“word”的字段,其类型为“hello”。即它可以拥有的唯一有效值(除了未定义和空值)是“你好”。它不会初始化该字段,因此它仍然是未定义的。如果你想要一个字符串类型的字段,初始化为“hello”,你需要

private word = "hello";

这是一种较短的形式(感谢类型推断)

private word: string = "hello";

相同的解释代表components

于 2016-08-26T21:00:29.953 回答
1

原因很简单,你只是混淆了typeand的赋值value

现在你有: private word: "hello";

应该: private word: string = "hello";

之后:输入类型,然后是默认值=

access_modificatior variable_name: type = default_value

于 2016-08-27T06:17:07.843 回答