【问题标题】:Angular http rxjs/Rx Observable Subscribe data binding not workingAngular http rxjs/Rx Observable订阅数据绑定不起作用
【发布时间】:2026-01-10 17:05:01
【问题描述】:

我正在尝试将 PHP API 中的数据绑定到客户端(Angular 2),但是,它没有按预期工作。有什么想法吗?

这是下面的laravel API代码,

 return response()-> json('message',200);

这是 Angular 2 服务,订阅如下,

  getString(): Observable<string> {
    return this._http.get(this.api_misc_url)
        .map((response: Response) => <string>response.json())
        .catch(this.handleError);

}

这是订阅者代码,如下所示,

  public ngOnInit(): void {
    this.chartId = `mydash-chart-${MydashChartComponent.currentId++}`;

   this.laravelApiService.getString().subscribe(
            messageFromLaravelApi => this.MessageFromLaravelApi = <string>messageFromLaravelApi,
            error => this.errorMessage = <string>error);
  }

这是下面的UI绑定代码,

   <div class='panel-heading' >
    <h2>Charting </h2>


                    <td>{{ MessageFromLaravelApi }}</td>


</div>

但是,我可以看到控制台日志中显示的值。

【问题讨论】:

    标签: rxjs angular2-template angular2-services


    【解决方案1】:

    使用 subscribeasync ,不能同时使用。 async 接受 observable 或 promise 并呈现数据。

    要么这个

       this.MessageFromLaravelApi$ = this.laravelApiService.getString();
    

    http:

    <tr *ngFor="let message of MessageFromLaravelApi$ | async">
        <td>{{ message }}</td>
    </tr>
    

    this.laravelApiService.getString()
       .subscribe(
           messageFromLaravelApi => 
                this.MessageFromLaravelApi = messageFromLaravelApi,
           error => this.errorMessage = <any>error
        );
    

    http

    <tr *ngFor="let message of MessageFromLaravelApi">
        <td>{{ message }}</td>
    </tr>
    

    更新相同的代码:

    服务代码

      getString(): Observable<string> {
        return this._http.get(this.api_misc_url)
            .map((response: Response) => response.json())
            .catch(err=> console.error(err));
      }
    

    组件代码:

      public ngOnInit(): void {
        this.chartId = `mydash-chart-${MydashChartComponent.currentId++}`;
    
       this.laravelApiService.getString().subscribe(
                messageFromLaravelApi => 
          this.MessageFromLaravelApi = messageFromLaravelApi,
                error => this.errorMessage = error);
      }
    

    HTML

       <div class='panel-heading' >
        <h2>Charting </h2>
    
    
                        <td>{{ MessageFromLaravelApi }}</td>
    
    
    </div>
    

    【讨论】:

    • 我尝试了第二个选项,但仍然没有运气。另外,我更新了上面的 API 代码。我已经删除了异步,但只删除了订阅。 @Skeptor
    • 您收到的响应为{ message: 'Testing', message2: 'Testing 2 '},它不是一个数组。在 HTML 中删除其他人并尝试 {{ MessageFromLarabelApi}}
    • 我之前试了几次都没用,我又试了一次,没有运气:(!@Skeptor.
    • console.log 订阅并查看您获得的数据。删除服务中的String[],因为数据不是字符串数组
    • 您的服务函数的返回类型仍然错误,该函数返回一个来自 {message:string, message2:string} 的对象的可观察对象,而不是字符串