я не получаю обновленные данные из службы в событие onclick моего component1 в component2 в angular - PullRequest
1 голос
/ 20 марта 2020

Я работаю над angular 9, чтобы создать новостное приложение. Я использую RSS-канал Times of India https://timesofindia.indiatimes.com

Вот моя ссылка на стек https://stackblitz.com/github/mehulk05/Newsapp

У меня есть категории в моем домашнем компоненте, поэтому, когда я нажимаю на любую категорию, я получаю новости об этой категории в своем сервисе и пытаюсь отобразить их в NewsList Component. Но как-то, когда я меняю моя категория Я не могу отправить последние данные из службы в компонент NewsList. Хотя я получаю обновленные данные в консоли в 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, но я получаю данные в консоли fr ом Ньюсервис

1 Ответ

1 голос
/ 21 марта 2020

Здесь я вижу, что вы пытаетесь сделать, это

  1. Щелкните событие из компонента 1 и отправьте некоторый URL-адрес в службу
  2. получите данные thaturl в службе
  3. отправить эти данные в компонент 2

Теперь вы можете создать отправитель события в службе и передать это событие из компонента 1 с данными сервиса в компонент 2. Так как это сделать? Вот он

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"])
    }

список новостей. тс

news:any
 ngOnInit() {
        this.ns.getData().subscribe(data=>
          {
            console.log(data)
          })
        this.news = this.ns.getNewsList();
        this.ns.selectedurl.subscribe(data => {
          console.log(data)
      })

    }
...