В компоненте displayresults я пытаюсь передать ответ, полученный от http.get (), в компонент articleinfo.
Первоначально я делал это с помощью queryParams, но мне нужно передать более сложную информацию из моего JSON, такую как другие объекты и массивы. Я использую ArticleInformationService, чтобы установить ответ, используя this.article_info.setJSONData(response);
, а затем я использую console.log(this.article_info.getJSONData());
, чтобы убедиться, что я получаю правильные данные, и я в порядке. Но теперь, когда я иду в компонент articleinfo и пытаюсь console.log(article_info.getJSONData());
, я получаю пустой объект. Я предполагаю, что article_info
внутри компонента articleinfo не видит своего значения из displayresults, потому что это новый экземпляр? Я иду об этом правильным путем?
Компонент 1
import { Component, OnInit } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Router, NavigationExtras } from "@angular/router";
import { ArticleInformationService } from "../article_information/article-information.service";
@Component({
selector: "app-displayresults",
templateUrl: "./displayresults.component.html",
styleUrls: ["./displayresults.component.css"],
providers: [ArticleInformationService]
})
export class DisplayresultsComponent implements OnInit {
response: any;
constructor(
private http: HttpClient,
private router: Router,
private article_info: ArticleInformationService
) {}
ngOnInit() {
this.search();
}
search() {
var query: string = window.location.search.substring(1).split("=")[1];
this.http
.get(
"http://my.json/_search?q=" +
query +
"&size=100"
)
.subscribe(response => {
this.response = response;
//*******Setting the response to the service atttribute
this.article_info.setJSONData(response);
console.log(response);
console.log(this.article_info.getJSONData());
});
}
Компонент 2
import { Component, OnInit } from "@angular/core";
import { ActivatedRoute } from "@angular/router";
import { ArticleInformationService } from "../article_information/article-information.service";
@Component({
selector: "app-articleinfo",
templateUrl: "./articleinfo.component.html",
styleUrls: ["./articleinfo.component.css"],
providers: [ArticleInformationService]
})
export class ArticleinfoComponent implements OnInit {
constructor(article_info: ArticleInformationService) {
console.log(article_info.getJSONData());
}
ngOnInit() {}
}
Услуги
import { Injectable } from "@angular/core";
@Injectable({
providedIn: "root"
})
export class ArticleInformationService {
jsonData;
constructor() {
this.jsonData = {};
}
setJSONData(val: object) {
this.jsonData = val;
}
getJSONData() {
return this.jsonData;
}
}