【问题标题】:Data are not displayed althought the request is valid尽管请求有效,但不显示数据
【发布时间】:2020-02-26 08:10:43
【问题描述】:

我有一个微服务和一个 Angular 网页,看起来像

export class FilpComponent implements OnInit {
  flipped = false;
  word: MetaWord;

  flipIt() {
    this.flipped = !this.flipped;
  }

  constructor(private breakpointObserver: BreakpointObserver, private  metaWordService: MetaWordService) {
  }

  ngOnInit() {
    this.metaWordService.read('laufen').subscribe(
      (data: MetaWord) => {
        this.word = data;
// this outputs undefined
        console.log(this.word.word);
      });
  }

  getSences(): Sens[] {
    return this.word.senses;
  }
}

模板看起来像

<ng-container *ngIf="word !== undefined">
  <div>{{word.word}}</div>
</ng-container>

请求已正确发送,我可以在 Chrome DevTools 中显示数据。但是订阅的输出是未定义的。

这是console.log(data)console.log(word) 的输出

更新:感谢 Nicholas K,它现在可以正常工作,但我在这里遇到了同样的问题

getWords() 方法返回一个 word 类型的填充对象。对象词现在有不同的含义。我想将不同的感官显示为 div,如下所示:

<div *ngFor="let word of getWords()">
  <div id="player" class="player" [class.voted]="flipped">
    <div class="front">
      <div class="grid-container">
        <h1 class="mat-h1">Dashboard</h1>
        <h1 class="mat-h1">{{word.word}}</h1>
        <div *ngFor="let example of word.senses">
          <div> here is an example of the word : {{example.sense}}</div>
        </div>

      </div>
    </div>
  </div>
</div>

单词对象填充了数据,但我希望看到多个 div

后端服务读取的代码是

return this.httpClient.get<MetaWord[]>(`${environment.words.baseUrl}/${term}`);

当我编写这样的测试方法时

  public print(){
    this.wordList.forEach(word=>{
      console.log(word.senses.length);
    })
  }

从后端服务调用数据后调用它,然后我得到错误

TypeError: Cannot read property 'length' of undefined

它以某种方式无法正确地将数据解析为我的对象

【问题讨论】:

  • console.log(this.word) 打印什么?
  • 你试过console.log(data)吗?
  • data 是一个数组,你需要先访问一个索引。例如:this.data[0].word
  • 数据是元字类型的对象

标签: angular typescript httpclient


【解决方案1】:

data 是一个数组,您需要先访问一个索引才能到达所需的对象。

例如:

console.log(this.data[0].word);


进行以下更改:

 ngOnInit() {
    this.metaWordService.read('laufen').subscribe(
      (data: MetaWord[]) => {
        // access via an index
        console.log(this.data[0].word);
      });
 }

假设您的模型MetaWord 已根据问题中的响应定义。

【讨论】:

  • 没有。它是MetaWord 的数组。应该写成这样:...subscribe(data: MetaWord[]) =&gt; { console.log(this.data[0].word); }
  • 谢谢 Nicholas K。我已经更新了问题,因为模板中存在同样的问题
  • 不客气。你能详细说明'expect multiple divs'吗?您应该将响应分配给一个数组,例如words = this.data。现在在模板中,您需要遍历 this 数组 *ngFor="let content of words.
  • 另外,您需要分享getWords() 的代码。
  • 还是看不到getWords() 的返回值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 2018-12-04
相关资源
最近更新 更多