【发布时间】:2019-04-04 23:40:00
【问题描述】:
在 displayresults 组件中,我试图将从 http.get() 获得的响应传递给 articleinfo 组件。
我最初是通过使用 queryParams 来执行此操作的,但我需要从我的 JSON 传递更复杂的信息,例如其他对象和数组。我正在使用 ArticleInformationService 来设置使用 this.article_info.setJSONData(response); 的响应,然后我使用 console.log(this.article_info.getJSONData()); 来确保我得到了正确的数据并且我是。但是现在当我进入 articleinfo 组件并尝试 console.log(article_info.getJSONData()); 时,我得到一个空对象。我的假设是 articleinfo 组件中的article_info 没有从 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;
}
}
【问题讨论】:
-
在服务中存储数据后是否调用了您的组件2?我猜你的 componet2 在你 set() 值之前调用了 get() 方法。你需要 observable 来跟踪你的价值观
标签: json angular typescript service components