【问题标题】:It takes time to display data in html page在html页面中显示数据需要时间
【发布时间】:2019-07-12 12:43:56
【问题描述】:

当用户点击用户列表中的查看按钮时,我想在不同的页面上显示特定用户的数据。
我有获取数据表单 API。当我单击用户列表中的查看按钮时,我会重定向到查看页面并在控制台表单 API 中获取所有用户数据。
但是用户数据不显示在视图 html 页面中。
以下是我尝试过的代码
组件代码 ts 文件

mediaData: any = {};  
getMediaType() {
let media_id = this.media_id;
this.service.getSingleMediaType(media_id).subscribe(
  res => {
    this.mediaData = res[0];
    console.log(this.mediaData);
  },
  err => {
    if (err instanceof HttpErrorResponse) {
      if (err.status == 401) {
        this.router.navigate(['/others/signin']);
      }
    }
  }
);
}  

以下是我的html代码

<div class="pb-1">
    <div>
<mat-label>Upin</mat-label></div>
         <mat-form-field>
             <input matInput readonly value="{{ mediaData ? mediaData?.upin: ''}}">
         </mat-form-field>   
    </div>        
 <div class="pb-1">
    <div>
<mat-label>Bid Type</mat-label></div>
        <mat-form-field>
           <input matInput readonly value="{{ mediaData ? mediaData?.type: ''}}">
        </mat-form-field>
  </div>  

以下是服务功能

getSingleMediaType(media_id) {
        return this.http.get<any>(`${this.apiUrl}getMediaType/${media_id}`);
 }  

请为此帮助我。在此先感谢您。
P.S:有些时间数据会在一段时间后显示,但有些时间不会显示。当我在查看页面上打开控制台登录时,会显示用户数据。我不明白这是怎么回事。

【问题讨论】:

  • 你什么时候打电话给getMediaType()?你能显示一些代码吗?
  • 我在 ngOnInit 中调用 getMediaType() 以下是我的代码 ngOnInit() { this.media_id = this.route.snapshot.paramMap.get('id'); // console.log(this.media_id); this.getMediaType(); }
  • 你能发布console.log(this.mediaData);语句的控制台输出吗?
  • @prabhakaran 它是一个 json 对象 {addr: "Nr. Rakhiyal Gujarat Botling Circle, Navnirman Co. Op. Bank Corner, 132 Foot Ring Road, Right side of Rakhiyal to Nagarvel Road Rakhiyal" bid_type: 1 connect_area: "1" del_flag: 0 det_addr: "NA" disp: 1 foot_spec: "Circle" h_height: 12 h_width: 12 hoard_details: "ASD" hoard_name: "ASD" id: 1 illu: "2" land: "Rakhiyal Circle" licno: "" media_ext: "None" media_road: "hoarding-0" media_type: 5 media_ward: "DUDHESWAR" media_zone: "5" mtype: "ROAD PACKAGE" pack_details: "" pack_name: "" }
  • 我在上面的 json 对象中没有看到 upintype 属性。尝试在当前控制台语句旁边添加控制台语句console.log('upin',this.mediaData.upin); console.log('type',this.mediaData.type); 以验证预期数据是否到达。

标签: angular data-binding delay


【解决方案1】:

好的,我猜你的响应数据看起来像这样

class MediaData {
    upin: string;
    type: string;
}

您应该使用 Angular 表单,我更喜欢使用响应式表单,但您也可以使用模板驱动的表单(它会更接近您已经完成的操作)。

正确初始化您的 mediaData 对象:

mediaData: MediaData = {
    upin: '',
    type: '',
};

这意味着您必须将类型添加到 http 请求中。

getSingleMediaType(media_id) {
    return this.http.get<MediaData>(`${this.apiUrl}getMediaType/${media_id}`);
}
getMediaType() {
    this.service.getSingleMediaType(this.media_id).subscribe(
      (res: MediaData[])=> {
        this.mediaData = res[0];
        console.log(this.mediaData);
      },
      err => {
        if (err instanceof HttpErrorResponse) {
          if (err.status == 401) {
            this.router.navigate(['/others/signin']);
          }
        }
      }
    );
}  

然后使用表格:

<div class="pb-1">
    <div>
        <mat-label>Upin</mat-label>
    </div>
    <mat-form-field>
        <input matInput readonly  [(ngModel)]="mediaData.upin" name="upin" id="upin">
    </mat-form-field>   
</div>        
<div class="pb-1">
    <div>
        <mat-label>Bid Type</mat-label>
    </div>
    <mat-form-field>
       <input matInput readonly [(ngModel)]="mediaData.type" name="type" id="type">
    </mat-form-field>
</div>  

【讨论】:

  • 拥有响应式表单或在服务中使用类型定义如何解决数据不显示的问题?
  • types 是很好的做法;不能解决任何问题,但您会更快地发现错误。使用角度数据绑定功能会更容易。您已经在使用该框架。顺便说一句,我向您展示了模板驱动的表单不是反应式的。
  • 当我像这样使用&lt;input matInput readonly [value]=" mediaData ? mediaData?.type: ''"&gt; 它给出了未定义
  • 我刚刚阅读了原帖中的 cmets。您需要显示来自 http 请求的响应,它看起来像问题。这就是类型有帮助的原因。您的响应正文是 MediaData 对象的数组吗?因为这就是它的样子,但如果不是,那就是问题所在。
  • @JoeyGough 是的,它是 mediaData 对象数组{type: "Individual Media" upin: "AMCADVT1415C0121"} 这是我从 API 得到的响应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多