如何从Spring后端获取一条记录并在Angular 前端显示

kyks70gy  于 2022-10-30  发布在  Spring
关注(0)|答案(2)|浏览(140)

我在spring webflux后端有一个微服务,我正在为同一个服务开发UI。现在我有一个GET请求,它根据提供的memberId返回成员详细信息。如何从后端获取成员详细信息并在前端显示。GET请求如下所示:localhost:8081/viewbill/234。我试着在angular中实现它,但是没有发现任何成功。我不知道如何在Angular UI上显示数据。我还附上了GET端点的 Postman 截图。下面是我的Angular文件结构:x1c 0d1x
app-routing.module.ts

const routes: Routes = [
  {path:'get-member', component:MemberListComponent},
  {path:'view-member', component:MemberDetailsComponent}
];

member-service.ts

viewMemberDetails(memberId:string):Observable<any>
  {
    const url="http://localhost:8081/viewbill/"+memberId;
    return this.httpclient.get<any>(url);

  }
}

member-details.component.ts

export class MemberDetailsComponent implements OnInit {
  member:Member=new Member();
  memberId:any;

  constructor(private memService:MemberService,private route:Router) { }

  ngOnInit(): void {
      this.memService.viewMemberDetails(this.memberId).subscribe(data=>{
        this.member=data;
        console.log(data);

      });
  }

member-details.component.html

<div class="container">
        <h2>Member Details</h2>
        <table class="table table-striped">
          <thead>
            <tr>
                <th>MemberId</th>
              <th>FirstName</th>
              <th>LastName</th>
              <th>Age</th>
              </tr>
              <tr *ngFor=let m of member>
              <th>{{m.memberId}}</th>
              <th>{{m.firstName}}</th>
              <th>{{m.lastName}}</th>
              <th>{{m.age}}</th>
              </tr>
          </thead>

        </table>
      </div>

</body>
</html>
<router-outlet></router-outlet

我尝试使用ngfor显示数据,但收到错误消息类型'Member'无法指派给类型'NgIterable|零值|未定义“。

<tr *ngFor="let m of member">
xtfmy6hx

xtfmy6hx1#

假设通过您正在使用的memberId,有任何数据要获取(这可能是您获取null的简单原因,并且您正在使用memberId,因为在示例中您提供的memberId从未初始化。
首先,正如@Aid Hadzic提到的,*ngFor需要一个Intable来迭代它的初始值。你提供的变量memberMember类型,它可能是不可迭代的。

<tr *ngIf=!!member>
      <th>{{member.memberId}}</th>
      <th>{{member.firstName}}</th>
      <th>{{member.lastName}}</th>
      <th>{{member.age}}</th>
</tr>

更接近你想要的。
其次,我强烈建议你尽可能地保持你的应用程序的React性。这意味着你可能想避免手动值处理和更新,并利用最佳实践,如async-管道,在这种情况下,它是由Angular本机提供的。这意味着在你的情况下,像下面这样的设置可能值得一看:
第一个

3mpgtkmj

3mpgtkmj2#

*ngFor将不起作用,因为您的变量未定义为NgIterable(数组等)。
我也没有看到你曾经给memberId赋值。也许你的请求甚至失败了?
但是,如果请求成功,在服务调用的订阅中,将响应结果值赋给member就足够了。为了安全起见,在HTML模板中,可以将member?.memberIdmember?.firstName等赋给member

相关问题