-1

コードに問題があるため、アイテムの詳細を表示する必要があります。これらの詳細は ws から取得します。ws ID に投稿すると、ws から詳細が返されます。私はこのコードを試しました:

populateFormAlarm() {
    this.route.params.subscribe(
        params => {
            console.log('params',params) //show id correctly
            this.as.AlarmGetById(params['id']).subscribe(
                alarm => {
                    console.log('alarm',alarm) // ID is undefined
                    this.alarm = alarm; 
                }
            );
        }
    );
}

Service.ts

public AlarmGetById(id: string): Observable<Alarm> {
    let headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');
    let urlSearchParams = new URLSearchParams();
    urlSearchParams.append('id', id);
    urlSearchParams.append('unique', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9');
    let body = urlSearchParams.toString();
    console.log('body', urlSearchParams.toString())
    return this.http.post(Api.getUrl(Api.URLS.AlarmGetById), body, {
        headers: headers
    })
        .pipe(map((response: Response) => {
            let res = response.json();
            if (res.StatusCode === 1) {
            } else {
                return new Alarm(res.StatusDescription[0]);
            }
        }));
}

私のパラメータの結果: console.log('params',params) //ID を正しく表示

JS: params {
JS:   "id": "5"
JS: }

私の完全なエラー:

ERROR TypeError: Cannot read property 'id' of undefined
JS: ERROR CONTEXT {
JS:   "view": {
JS:     "def": {
JS:       "nodeFlags": 33603585,
JS:       "rootNodeFlags": 33554433,
JS:       "nodeMatchedQueries": 0,
JS:       "flags": 0,
JS:       "nodes": [
JS:         {
JS:           "nodeIndex": 0,
JS:           "parent": null,
JS:           "renderParent": null,
JS:           "bindingIndex": 0,
JS:           "outputIndex": 0,
JS:           "checkIndex": 0,
JS:           "flags": 33554433,
JS:           "childFlags": 49152,
JS:           "directChildFlags": 49152,
JS:           "childMatchedQueries": 0,
JS:           "matchedQueries": {},
JS:           "matchedQueryIds": 0,
JS:           "references": {},
JS:           "ngContentIndex": null,
JS:           "childCount": 1,
JS:           "bindings": [],
JS:           "bindingFlags": 0,
JS:           "outputs": [],
JS:           "element": {
JS:             "ns": "",
JS:             "name": "ActionBar",
JS:             "attrs": [
JS:               [
JS:                 "",
JS:                 "class",
JS:                 "action-bar"
JS:               ],
JS:               [
JS:                 "",
JS:                 "title",
JS:                 "Details"
JS:               ]
JS: ...

paramsこのコードで正しく使用したことを教えてください。

このコードは Web アプリで使用したもので、うまく機能します。この問題を解決する方法を教えてください。ありがとうございました。

4

1 に答える 1

1

ParamMap を使用してみてください。動作するはずです

    let userId = this.route.snapshot.params["id"];
    this.as.AlarmGetById(userId).subscribe(
            alarm => {
                this.alarm = alarm; 
            }
于 2018-06-13T20:06:54.043 に答える