angular 中组件 2 中的组件 1 onclick 事件没有从服务获取更新数据
not getting updated data from service to my component1 onclick event in component2 in angular
我正在 angular 9 制作新闻 application.I 我正在使用印度时报 RSS Feed API https://timesofindia.indiatimes.com
这是我的 stackblitz link https://stackblitz.com/github/mehulk05/Newsapp
我的主页组件中有类别,所以当我单击任何类别时,我会在我的服务中获取该类别的新闻,并试图在 NewsList Component.But 中以某种方式显示它,当我更改我的类别时,我我无法将最新数据从服务发送到 newsList Component.Though 我正在 NewsService 的控制台中获取更新数据,但无法在 newsListComponent
中获取该数据
这是我的代码
Home.component.html
<div class="container mt-5">
<div class="col-xs-12">
<div class="row mt-4">
<div class="col-xs-3 col-md-3 sidelink">
<div class="list-group">
<a *ngFor="let c of categories"
class="list-group-item list-group-item-action"
id="list-home-list" [routerLink]=""
role="tab" aria-controls="home"
( (click)='onClick(c.url)'>{{c.type}}</a>
</div>
</div>
<div class="col-md-9 col-xs-9">
<router-outlet></router-outlet>
</div>
</div>
</div>
</div>
Home.component.ts
export class HomeComponent implements OnInit {
categories=[
{type:"home",url:"https://timesofindia.indiatimes.com/rssfeedstopstories.cms?feedtype=sjson"},
{type:"recent",url:"https://timesofindia.indiatimes.com/rssfeeds/1221656.cms?feedtype=sjson"},
{type:"india",url:"https://timesofindia.indiatimes.com/rssfeeds/-2128936835.cms?feedtype=sjson"},
{type:"cricket",url:"https://timesofindia.indiatimes.com/rssfeeds/4719161.cms?feedtype=sjson"}]
constructor(private ns:NewsserviceService,
private router:Router) { }
ngOnInit(): void {
}
onClick(title){
console.log(title)
this.ns.getUrl(title)
this.router.navigate(["/news-list"])
}
}
NewsService.ts
export class NewsserviceService {
url:string='https://timesofindia.indiatimes.com/rssfeedstopstories.cms?feedtype=sjson'
constructor(private http:HttpClient) {
}
getUrl(url){
this.url=url
this.getNewsList();
}
getNewsList(){
this.url='https://cors-anywhere.herokuapp.com/'+this.url
console.log(this.url)
this.http.get(this.url ).subscribe(data=>{
console.log(data)
})
}
}
NewsList.component.ts
news:any
constructor(private ns:NewsserviceService,private cd:ChangeDetectorRef) { }
ngOnInit() {
this.news= this.ns.getNewsList();
console.log("news is" +this.news)
}
}
当我单击任何类别时,我将第一次在控制台中从 Newslist 组件获取数据,但此后我没有从 newsList 组件获取任何数据,但我在控制台中从 Newservice 获取数据
在这里我可以看到你想要做的是
- 单击组件 1 中的事件并将一些 url 发送到服务
- 在服务中获取 url 的数据
- 将该数据发送到组件 2
现在您可以做的是在服务中创建一个事件发射器,并将该事件从组件 1 与服务数据一起发射到组件 2.So 如何执行这里是
Service.ts
SelectedUrlData=new EventEmitter();
getUrl(url){
this.url=url
this.getNewsList();
}
getNewsList() {
this.url = 'https://cors-anywhere.herokuapp.com/' + this.url
this.http.get<any[]>(this.url).subscribe(data => {
this.tohome = data
})
}
getData(): Observable<any> {
this.url='https://cors-anywhere.herokuapp.com/'+this.url
return this.http.get<any[]>(this.url);
}
Home.ts
@Input() newdata:any
ngOnInit(): void {
this.ns.getData().subscribe(data=>
{
console.log(data)
})
}
onClick(title){
this.ns.getUrl(title)
this.tohome=this.ns.tohome
this.ns.selectedurl.emit(this.tohome)
this.router.navigate(["/news-list"])
}
newslist.ts
news:any
ngOnInit() {
this.ns.getData().subscribe(data=>
{
console.log(data)
})
this.news = this.ns.getNewsList();
this.ns.selectedurl.subscribe(data => {
console.log(data)
})
}
我正在 angular 9 制作新闻 application.I 我正在使用印度时报 RSS Feed API https://timesofindia.indiatimes.com
这是我的 stackblitz link https://stackblitz.com/github/mehulk05/Newsapp
我的主页组件中有类别,所以当我单击任何类别时,我会在我的服务中获取该类别的新闻,并试图在 NewsList Component.But 中以某种方式显示它,当我更改我的类别时,我我无法将最新数据从服务发送到 newsList Component.Though 我正在 NewsService 的控制台中获取更新数据,但无法在 newsListComponent
中获取该数据这是我的代码
Home.component.html
<div class="container mt-5">
<div class="col-xs-12">
<div class="row mt-4">
<div class="col-xs-3 col-md-3 sidelink">
<div class="list-group">
<a *ngFor="let c of categories"
class="list-group-item list-group-item-action"
id="list-home-list" [routerLink]=""
role="tab" aria-controls="home"
( (click)='onClick(c.url)'>{{c.type}}</a>
</div>
</div>
<div class="col-md-9 col-xs-9">
<router-outlet></router-outlet>
</div>
</div>
</div>
</div>
Home.component.ts
export class HomeComponent implements OnInit {
categories=[
{type:"home",url:"https://timesofindia.indiatimes.com/rssfeedstopstories.cms?feedtype=sjson"},
{type:"recent",url:"https://timesofindia.indiatimes.com/rssfeeds/1221656.cms?feedtype=sjson"},
{type:"india",url:"https://timesofindia.indiatimes.com/rssfeeds/-2128936835.cms?feedtype=sjson"},
{type:"cricket",url:"https://timesofindia.indiatimes.com/rssfeeds/4719161.cms?feedtype=sjson"}]
constructor(private ns:NewsserviceService,
private router:Router) { }
ngOnInit(): void {
}
onClick(title){
console.log(title)
this.ns.getUrl(title)
this.router.navigate(["/news-list"])
}
}
NewsService.ts
export class NewsserviceService {
url:string='https://timesofindia.indiatimes.com/rssfeedstopstories.cms?feedtype=sjson'
constructor(private http:HttpClient) {
}
getUrl(url){
this.url=url
this.getNewsList();
}
getNewsList(){
this.url='https://cors-anywhere.herokuapp.com/'+this.url
console.log(this.url)
this.http.get(this.url ).subscribe(data=>{
console.log(data)
})
}
}
NewsList.component.ts
news:any
constructor(private ns:NewsserviceService,private cd:ChangeDetectorRef) { }
ngOnInit() {
this.news= this.ns.getNewsList();
console.log("news is" +this.news)
}
}
当我单击任何类别时,我将第一次在控制台中从 Newslist 组件获取数据,但此后我没有从 newsList 组件获取任何数据,但我在控制台中从 Newservice 获取数据
在这里我可以看到你想要做的是
- 单击组件 1 中的事件并将一些 url 发送到服务
- 在服务中获取 url 的数据
- 将该数据发送到组件 2
现在您可以做的是在服务中创建一个事件发射器,并将该事件从组件 1 与服务数据一起发射到组件 2.So 如何执行这里是
Service.ts
SelectedUrlData=new EventEmitter();
getUrl(url){
this.url=url
this.getNewsList();
}
getNewsList() {
this.url = 'https://cors-anywhere.herokuapp.com/' + this.url
this.http.get<any[]>(this.url).subscribe(data => {
this.tohome = data
})
}
getData(): Observable<any> {
this.url='https://cors-anywhere.herokuapp.com/'+this.url
return this.http.get<any[]>(this.url);
}
Home.ts
@Input() newdata:any
ngOnInit(): void {
this.ns.getData().subscribe(data=>
{
console.log(data)
})
}
onClick(title){
this.ns.getUrl(title)
this.tohome=this.ns.tohome
this.ns.selectedurl.emit(this.tohome)
this.router.navigate(["/news-list"])
}
newslist.ts
news:any
ngOnInit() {
this.ns.getData().subscribe(data=>
{
console.log(data)
})
this.news = this.ns.getNewsList();
this.ns.selectedurl.subscribe(data => {
console.log(data)
})
}