注: この記事では、実装中に typescript で OnInit が見つからないことがわかりましたが、以下のコードは既にOnInit
/をインポートしていOnDestroy
ます。
私が見つけたすべての例 (例: Using Route Parametersimplements OnInit
) は、 /OnDestroy
句をクラス定義に追加し、ルートからパラメーターを取得するためにサブスクライブするときにngOnInit
/メソッドを含めることを示しています。コードはこれを行っています。ngOnDestroy
ただし、VS2017 では、句に対して「OnInit/OnDestroy が正しく実装されていません」というエラーが報告され、関数に対して「ngOnInit/ngOnDestroy が見つかりません」というエラーが報告されます。
句を削除して/関数implements
をコメント化すると (本体のコードのみを残して)、コードは機能します。ルート パラメーターからパラメーターを正常に取得します。ngOnInit
ngOnDestroy
ngOnInit
import { Component, Inject, OnInit, OnDestroy } from '@angular/core';
import { Http } from '@angular/http';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'submission',
templateUrl: './submission.component.html'
})
export class SubmissionComponent implements OnInit, OnDestroy {
private baseUrl: string;
private http: Http;
private route: ActivatedRoute;
private sub: any;
public caseId: string;
public submission: Submission;
constructor(http: Http, route: ActivatedRoute, @Inject('BASE_URL') baseUrl: string) {
this.http = http;
this.route = route;
this.baseUrl = baseUrl;
ngOnInit() {
this.sub = this.route.params.subscribe(params => {
this.caseId = params['caseId'];
// In a real app: dispatch action to load the details here.
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
this.get(this.caseId);
}
public get(caseId: string) {
var url = this.baseUrl + 'api/Submission/GetSubmission?caseId=' + caseId;
this.http.get(url).subscribe(result => {
this.submission = result.json() as Submission;
}, error => console.error(error));
}
public put() {
var url = this.baseUrl + 'api/Submission/PutSubmission';
this.http.put(url, this.submission).subscribe(result => {
this.submission = result.json() as Submission;
}, error => console.error(error));
}
}