无法获取angular 6中的api值
我使用的代码并不复杂,但我似乎无法理解为什么无法获取angular 6中的api值,angular,typescript,Angular,Typescript,我使用的代码并不复杂,但我似乎无法理解为什么Get请求无法获取api值。它能够做到这一点,但当涉及到用户的帖子,它失败得很惨 这是我的posts.components.ts:- import { Component, OnInit } from '@angular/core'; import {DataService} from '../data.service'; import {Observable} from 'rxjs'; @Component({ selector: 'app
Get
请求无法获取api值。它能够做到这一点,但当涉及到用户的帖子,它失败得很惨
这是我的posts.components.ts:-
import { Component, OnInit } from '@angular/core';
import {DataService} from '../data.service';
import {Observable} from 'rxjs';
@Component({
selector: 'app-posts',
templateUrl: './posts.component.html',
styleUrls: ['./posts.component.css']
})
export class PostsComponent implements OnInit {
posts$: Object;
constructor(private pdata: DataService) {
}
ngOnInit() {
this.pdata.getPosts().subscribe(
pdata => this.posts$ = pdata
)
console.log(this.posts$);
}
}
这是html文件:-
<h1>Posts</h1>
<ul>
<li *ngFor = "let pst of post$">
<a routerLink=""> {{post$.title}}</a>
<p>{{post$.body}}</p>
</li>
</ul>
在检查控制台时,会显示undefined,在html页面中,只有标题可见,没有数据。我该怎么办?您应该将console.log仅放在subscribe中
ngOnInit() {
this.pdata.getPosts().subscribe(
pdata => {
this.posts$ = pdata;
console.log(this.posts$);
});
}
如果要访问组件中的变量,请使用*ngIf或安全导航操作符,因为您的请求是异步的
<a routerLink=""> {{post$?.title}}</a>
<p>{{post$?.body}}</p>
{{post$?.title}
{{post$?.body}
您的html文件应如下所示:
<h1>Posts</h1>
<ul>
<li *ngFor = "let post of posts$">
<a routerLink=""> {{post.title}}</a>
<p>{{post.body}}</p>
</li>
</ul>
ngOnInit() {
this.pdata.getPosts().subscribe(
pdata => {
this.posts$ = pdata;
console.log(this.posts$);
}
)
}
这可能不是主要问题,但可能有助于找出主要问题,请尝试一下,让我不断更新,以便我们能够解决它 首先,您要在订阅之外登录。这意味着,在从api获取数据之前,您需要记录数据。更改如下
ngOnInit() {
this.pdata.getPosts().subscribe(
pdata => {
this.posts$ = pdata
console.log(this.posts$);
}
)
}
现在在html中,您使用的是post$,但您在ts中声明了post$,并且代码中还有一些其他打字错误。所以把它改成
<h1>Posts</h1>
<ul *ngIf="posts$.length > 0">
<li *ngFor = "let post of posts$">
<a routerLink=""> {{post.title}}</a>
<p>{{post.body}}</p>
</li>
</ul>
帖子
-
{{post.title}
{{post.body}
我真的很感谢你们所有回答我并试图帮助我的人,但我已经解决了这个问题。posts是否为posts$并不重要,因为我只是将其用作变量名
问题就在这里
ngOnInit() {
this.pdata.getPosts().subscribe(
pdata => this.posts$ = pdata
而不是pdata=>this.posts$=pdata
它应该是
data=>this.posts$=data
,因为它是从我调用的DataService模块调用的。因此,通过将其更改为pdata,它无法识别模块,因此我无法看到html文件中的任何数据。它现在正在工作只要修复这个posts$应该是任何
posts$: any[];
用这样的空数组初始化是安全的
posts$: any[] =[];
要检查结果(pdata)值,只需将console.log移动到subscribe callback或只需检查chrome developer tool中的网络面板即可:
ngOnInit() {
this.pdata.getPosts().subscribe(pdata => {
this.posts$ = pdata;
console.log(this.posts$);
});
}
你到处都有很多错误
posts$
应该是组件中的posts
(它不是可观察的)。它应该是一个数组,而不是一个对象,所以不要将其键入为对象。在模板中,post$
应该是posts
<代码>pst应该是post
post$.title
应该与body的post.title
相同。@JBNizet仅供参考,因为我还在学习Angular 6。等一下,我会告诉你结果的。如果您可以检查该链接,您可以看到在用户组件中完成了相同的操作,并且用户视图正在正常工作。错误,是的。你问为什么你的代码不起作用,我告诉你为什么。有什么问题吗?@JBNizet我确实做了必要的修改,但仍然一无所获。实际上,它以前在控制台中显示未定义,而现在它什么也不显示\Your console.log,正如Sajeetharan的响应所告诉您的,这是没有意义的。您不能期望在发送电子邮件后立即阅读对电子邮件的回复。您只能在接收器已响应时读取响应。这里也一样。当我这样做时,它说'void'类型的参数不能赋值给'(error:any)=>void'类型的参数,这很重要,因为$
后缀是一种约定,表示变量是可观察的,而posts$不是可观察的。所以,你把那些不得不维护你的代码的可怜的家伙弄糊涂了。就像将firstName命名为包含lastName的变量一样,反之亦然。编译器不在乎,但维护者在乎。第二部分没有任何意义:可以为局部变量和参数选择所需的名称。是的,数据不那么容易混淆,因为您还有一个名为pData的实例变量(它的名称非常糟糕)。我刚刚对它进行了测试,实际上这是我特别提到的代码的第二部分。是的,正如我前面提到的那样,在我的部分中包含$suffix是一个错误,我只是在学习这个框架,所以我还没有完全熟悉所有的sytnax规则。但是谢谢你的解释,但实际上,pdata是这里的问题。很抱歉,这个方法给了我更多的“未定义”错误。我很感激你的帮助,但这只会让事情变得更糟。不过我知道有错别字。我没有注意到*ngFor中的post已变成pst,但主要问题在于行pdata=>this.posts$=pdata
由于到处都使用相同的数据变量,我将其误认为是局部变量,当我尝试以不同的方式命名每个变量时,我遇到了这个错误
ngOnInit() {
this.pdata.getPosts().subscribe(pdata => {
this.posts$ = pdata;
console.log(this.posts$);
});
}