开发者问题收集

RXJs Angular - 对象未定义

2021-03-21
82

首先,我要声明一下自己对 Angular 非常陌生,因为我正在尝试让简单的事情工作起来但却遇到了很大困难!

我有一个简单的 WebAPI,它将返回一个包含三个对象的 JSON 数组:

URL:https://localhost:44397/api/account

testListType.ts

export interface listTypes {
    limitTypeId: number;
    limitTypeText: string;
    limitTypeActive: boolean;
}

然后,我将 rxjs 加载到服务中

test.service.ts

import { Injectable } from '@angular/core';
import { listTypes } from '../models/testListType';
import { Observable, of } from 'rxjs';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { catchError, map, tap } from 'rxjs/operators';


@Injectable({
  providedIn: 'root'
})
export class TestService {


  getlistTypes(): Observable<listTypes[]> {
    var returnable = this.http.get<listTypes[]>('https://localhost:44397/api/account');
    return returnable;
  }

  constructor(private http: HttpClient) { }
}

最后,尝试在组件上显示该返回的内容

testing.component.ts

import { Component, OnInit } from '@angular/core';
import { listTypes } from '../models/testListType';
import { TestService } from '../services/test.service';


@Component({
  selector: 'app-testing',
  templateUrl: './testing.component.html',
  styleUrls: ['./testing.component.css']
})
export class TestingComponent implements OnInit {

  lists: listTypes[] = [];

  constructor(private testService: TestService) { }

  ngOnInit(): void {
    this.getListTypes();
  }

  getListTypes(): void {
    this.testService.getlistTypes()
        .subscribe(lists => this.lists = lists);
  }

}

这是根据我的要求修改 Angular 上的 Hero's of Ages 教程的结果。不幸的是,它什么都没显示,而且我太菜了,不明白如何调试订阅方法(我尝试过并得到了一个无意义的对象)。

当我尝试访问列表时,我在调试器中只能看到以下内容:

Uncaught ReferenceError: lists is not defined

毫无疑问,我错过了一个基本知识,我希望角度专家能在几秒钟内看到它,但我已经盯着它看了 2 个小时了!

任何帮助都很好。

更新 - 添加了组件 html

testing.component.html

<div *ngIf="testService.listTypes.length">

    <h2>Test</h2>
    <div *ngFor='let lists of testService.listTypes'> {{listTypes}} </div>
  
  </div>
1个回答

将模板代码修改为 -

<div *ngIf = "lists.length>0">
    <h2>Test</h2>
    <div *ngFor="let item of lists"> {{ item }} </div>  
</div>

组件负责收集将通过模板显示的数据。您已在 getListTypes() 中通过调用服务方法完成了此操作,该方法使用服务返回的数据填充了 lists 数组。

模板负责显示组件收集的数据。使用 *ngFor="let item of lists" 语句,您只需从组件中枚举已填充的 lists 数组,并显示每个项目。您不应从模板代码中调用服务。

atiyar
2021-03-21