angular - 如何修复 Angular 中的数据无法从服务传输到模块的问题

标签 angular typescript angular-material

我正在尝试通过服务从 API 获取数据。然后从模块内部记录它,稍后将在列表中显示它。该变量显示在服务的 console.log 中,但当我尝试将其记录到模块中时却没有显示

我之前用 ionic 做过同样的设置,我认为 Angular 的工作原理是一样的,但这里的情况并非如此。我已经通过错误处理扩展了 .subscribe 函数,但没有显示错误。我只是不知道该去哪里寻找。

api.service.ts

getPlacesData(): any {
    let result = this.http.get(`${this.apiUrl}/places`, this.httpOptions).pipe(
      map(response => {
        console.log(response['data']);
        response['data'];
      })
    );
    return result;
  }
}

测试仪表板.component.ts

constructor(private breakpointObserver: BreakpointObserver, private apiService: ApiService) {}

  getPlacesData() {
    this.apiService.getPlacesData().subscribe(
      (placesData: Observable<any>) => {
        console.log(placesData);
        this.placesData = placesData;
        console.log(this.placesData);
      },
      (error: string) => {
        console.log('Received an errror: ' + error);
      }
    );
  }

  ngOnInit() {
    this.getPlacesData();
  }
}

我希望第二个和第三个 console.log 具有与第一个相同的输出,但这些输出是“未定义”而不是:

(15) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}、{…}、{…}、{…}、{…}]

最佳答案

问题是您试图同步返回一个值。 Angular https 请求是异步的。请这样对待他们。你的函数应该返回 Observable。在 html 模板中使用异步管道来访问之后的数据。

getPlacesData(): Observable<Places[]> {
    return this.http.get<Places[]>(`${this.apiUrl}/places`, this.httpOptions).pipe(
      map(response => response['data']),
    );
  }
}

关于angular - 如何修复 Angular 中的数据无法从服务传输到模块的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57872260/

相关文章:

angular - 仅在当前 PageSize 上选择 Mat-Table?

javascript - HTML标签img的属性onload在Angular2中不起作用

angular - graphql 突变如何自动刷新 Apollo Client 正在监视的查询?

angular - typescript 使变量充当指向另一个变量的指针

typescript - 当 gulp 相关依赖项添加到 'processF0DebugResources' 部分时,NativeScript 2.0 [1.7.1] 构建在 'devDependencies' 处失败

Angular Material 表多个过滤谓词

angular-material - mat-form-field 必须包含一个 MatFormFieldControl。甚至我添加了 MatFormFieldModule

angular - 如何将一种类型的 Observable 转换为另一种类型的 Observable

angular - Safari、Iphone 上的 Firebase 电话身份验证问题

javascript - Next.JS:如何在服务器端发出所有请求