首页 > 解决方案 > 错误 [object%20Object] 将数据传递到 URL - Angular 中的 get 方法

问题描述

我在 Angular 8 中做我的项目,并面临使用 routerLink 传递数据的问题

这是我<tr>的 routerLink

<tr *ngFor="let user of allData" [routerLink]="['client', user.clientId]">

ClientComponents 和我传递数据的想法

  public clientData: any = this.route.params.subscribe(params => {
        return params.clientId;
    });

然后我将该数据传递给 ClientService

    getMethodClientDetails(): void {
        this.clientsService.getClientsDetails(this.clientData)
            .subscribe(data => {
                    this.list = data;
                },
                error => this.errorMsg = error,
            );
    }

我的 clientService 函数看起来像:

  getClientsDetails(data): Observable<any> {
        return this.http.get<any>(URL + data)
            .catch(this.errorHandler);
    }

这是我的请求网址

/clients?clientId=[object%20Object]

而不是 clientId 我得到一个错误。我不知道是什么问题,我只传递一个值,而不是整个对象

当我只是在做 console.log 来检查时,一切看起来都正确。

public clientData: any = this.route.params.subscribe(params => {
        console.log(params.clientId);
    });

在控制台输出

16960

有人可以帮我解决这个问题吗?

标签: javascriptangularhttp

解决方案


subscribe()方法调用返回一个 Subscription 对象,该对象具有一个unsubscribe()方法,您可以调用该方法来停止接收通知。

您定义的是在消费者调用该subscribe()方法时执行的订阅者函数。

您可以做的是创建一个在您的类中定义的属性public clientData: any;,然后在订阅者函数中分配该返回值:

this.route.params.subscribe(params => {
    this.clientData = params.clientId;
});

这就是为什么 console.log 没问题的原因,因为它被放在了订阅者函数中。

一些订阅只是被 Angular 本身取消订阅,但不是全部。取消订阅所有这些被认为是一种很好的做法。我为此使用subsink,它使生活更轻松。


推荐阅读