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";

これは、タイプが「hello」の「word」という名前のフィールドを定義します。つまり、有効な値 (undefined と null を除く) は "hello" だけです。フィールドを初期化しないため、まだ未定義です。「hello」に初期化された文字列型のフィールドが必要な場合は、

private word = "hello";

これは (型推論のおかげで) の短縮形です

private word: string = "hello";

同じ説明が を表しcomponentsます。

于 2016-08-26T21:00:29.953 に答える
1

理由は非常に単純で、 と の割り当てを混同しただけtypeですvalue

これで次のことができます。 private word: "hello";

次のようにする必要があります。 private word: string = "hello";

の後:にタイプが続き、の後にデフォルト値が続き=ます。

access_modificatior variable_name: type = default_value

于 2016-08-27T06:17:07.843 に答える