Angular7不显示承诺数据,但是如果我强制刷新浏览器,它将显示

时间:2019-02-26 15:17:54

标签: angular promise ngfor

这是我的模板

<div *ngFor="let article of articleList">
  <p class="title">{{article.title}}</p>
  <p class="content">{{article.content}}</p>
</div>

这是我的ts代码

export class IndexPageComponent implements OnInit {

constructor(private http:HttpClient) {
}

articleList: any;
ngOnInit() {
  this.getArticles();
}
getArticles() {
  const query = new Query('Post');//sdk function
  query.find().then(res => {
    this.articleList = res;
    console.log(res);
  });
}
}

我真的得到了答复

enter image description here

模板什么也不渲染,但是如果我单击浏览器的硬刷新按钮, 它呈现内容。

我不知道原因,有人可以帮助我吗? 我的英语不好,希望您不要介意。

这是res [0]

enter image description here

3 个答案:

答案 0 :(得分:1)

尝试这种方式:

<ng-container *ngIf="dataReady">
<div *ngFor="let article of articleList">
  <p class="title">{{article.title}}</p>
  <p class="content">{{article.content}}</p>
</div>
</ng-container>

export class IndexPageComponent implements OnInit {
dataReady = false;
constructor(private http:HttpClient, private cdr: ChangeDetectionRef) {
}

articleList: any;
ngOnInit() {
  this.getArticles();
}
getArticles() {
  const query = new Query('Post');//sdk function
  query.find().then(res => {
    this.articleList = res;
    this.dataReady = false;
    console.log(res);
    this.cdr.detectChanges();
  });
}
}

component decorator中添加:changeDetection: ChangeDetectionStrategy.OnPush

答案 1 :(得分:0)

原因是async管道。 async管道将自动从PromiseObservable获取值。 但就您而言,您已经自己处理Promise。 因此articleList不再是Promise

从模板中删除异步管道:

<div *ngFor="let article of articleList">
  <p class="title">{{article.title}}</p>
  <p class="content">{{article.content}}</p>
</div>

或设置articleList以保证从query.find()返回。

getArticles() {
  const query = new Query('Post');//sdk function
  this.articleList = query.find();
}

使用您当前的代码,您应该在控制台中看到如下错误:

错误 错误:InvalidPipeArgument:管道“ AsyncPipe”的'0,1,2,3,4,5,6'

答案 2 :(得分:0)

“模板什么也不渲染”但是什么时候?页面中是否还有其他功能可以保存新文章?保存这些新文章后,您是否忘了向this.getArticles()添加呼叫?