クラスのテーブルを埋めるために手書きの配列を取得しましたが、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;
}
ここでの問題は、「実行可能領域」の外側(たとえば、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
}