【问题标题】:Angular result for passing to variable on method传递给方法变量的角度结果
【发布时间】:2020-06-14 22:53:28
【问题描述】:

我有一个方法可以进行查询并获取一些数据。

我知道数据在那里,因为 console.log 正在显示它,但它没有传递给我创建的变量,所以我将它添加到组件的 .html 中的 *ngFor 循环中。

代码如下:

...

export class MainComponent {

  queryResult; // results wanted here

  constructor(private myService: MyService) {

    this.testQuery(); // run the method
  }


testQuery() {

    const qry = 'SELECT * FROM mytable';
    this.myService.db.query( qry, ( err, result ) => {
      if ( err ) {
        console.log('err', err);
      } else {
        console.log('result', result); // shows the data
        this.queryResult = result; // result is NOT passed to this.queryResult
      }
    } );
}

如何将结果数据传递给 this.queryResult?

更新:

我已经检查了 this.queryResult 那里实际上有数据。

看起来像这样:

console.log(this.queryResult);

它会返回这个:

那和 *ngFor 有关系吗?

这是那部分:

  <ul>
    <li *ngFor="let data of queryResult">
      {{data.City}}
    </li>
  </ul>

【问题讨论】:

  • 结果传递给this.queryResult。是什么让你不这么认为?
  • 放入 changerDectorRef。检测变化()
  • 我在 .html 中没有输出
    • {{data}}
  • 在将 this.queryResult 分配给结果后立即添加一个 console.log(this.queryResult)
  • 查询的返回类型是什么?它是一个异步函数吗?你试过this.queryResult = await this.myService.db.query(qry) 吗?

标签: angular typescript angular9


【解决方案1】:

因为你没有给你的 queryResult 一个类型,你不能使用 ngFor。 试试这个:

loadingData = true;
queryResult: any[] = [];

testQuery() {
    const qry = 'SELECT * FROM mytable';
    this.myService.db.query(qry, (err, (result: any[])) => {
      if ( err ) {
        console.log('err', err);
      } else {
        this.queryResult = JSON.parse(JSON.stringify(result)); // but I think your result is already converted
        this.loadingData = false;
      }
    } );
}

然后,您需要在模板中使用 ngIf。为什么?因为您的 html 内容必须在加载数据时构建。

<div *ngIf="!loadingData">
   <div *ngFor=.....>
   </div>
</div>

【讨论】:

  • 不起作用。我可以在控制台中看到数据,但在组件的 .html 部分中什么也看不到
  • 更新了答案。您需要使用布尔值等待数据,然后渲染 html,因为您的模板是在加载数据之前渲染的
  • 出于某种奇怪的原因,我必须调用该方法两次才能获取 .html 页面上的数据...否则它将正常工作
猜你喜欢
  • 2016-02-21
  • 2016-01-03
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
相关资源
最近更新 更多