web-dev-qa-db-ja.com

TypeScriptクラスの宣言の直後に関数の実装がないか、実装されていません

クラスのテーブルを埋めるために手書きの配列を取得しましたが、ngOnInitのJSONからこの配列のコンテンツを取得していますが、必要に応じて構造化されていません。

したがって、ngOnInitで取得しているこの新しい配列でテーブル配列を埋める関数を記述しようとしています。

問題は、TSクラスの関数の外にコードを記述すると、「関数の実装がないか、宣言の直後にない」というエラーが発生することです。

それはなぜですか?これを修正するために何ができますか?

TS

export class MyComponent implements OnInit {
    users: Object;

    constructor(private tstService: MyComponentService) { this.source = new LocalDataSource(this.data) }

    ngOnInit(): void {
        this.tstService.getTstWithObservable()
        .map(result => result.map(i => i.user.data))
        .subscribe(
           res => { this.users = res; }
       );
    }

    console.log(this.users); // Here, just an example. Throws 'Function implementation is missing or not immediately following the declaration'

    data = [
        {
          title: 'Monthly',
          sdate: '01/04/1990',
          edate: '30/09/1990',
        },
      ];

    source: LocalDataSource;
}
4
prevox

ここでの問題は、「実行可能領域」の外側(たとえば、ngOnInit内の「領域」)に「コード実行」(console.log(this.users);)があることです。

Devtoolsでデータを表示するためにconsole.log(this.users);を実行する必要がある場合は、ngOnInit内のconsole.log部分を移動する必要があります。これは、クラスの実行可能部分MyComponentまたは多分constructor内。

次のようにすることをお勧めします。

ngOnInit(): void {
    this.tstService.getTstWithObservable()
    .map(result => result.map(i => i.user.data))
    .subscribe(
       res => {
                this.users = res;
                console.log(this.users); // <-- moved here!
       }
   );
}

問題は、実行しようとしているコードがAngularを実行するいくつかのメソッド内にある必要があることです。

this demo をいくつかの例とともに参照してください。関連するコードは次のとおりです。

export class AppComponent  implements OnInit{
  name = 'Angular 6';

  constructor() {
    console.log(name); // OK
  }

  ngOnInit() {
    console.log('sample not giving error'); // OK
  }

 // comment line below and the error will go away
  console.log(name); // this will throw: Function implementation is missing or not immediately following the declaration
}
6
lealceldeiro