【发布时间】:2018-01-17 18:06:27
【问题描述】:
我正在尝试让多个角度组件订阅单个 http 服务。他的事件流程是:用户单击 test-data.component.html 中的按钮 > test-data.service 发出 POST 请求 > test-data.component 中的订阅接收数据并且 parent.component.ts 接收数据。问题是 parent.component.ts 永远不会从 POST 收到新数据。我是否需要通知 parent.component 服务提供者发生了变化?以下是应用程序的相关部分:
parent.component.html
<div>
<app-test-data></app-test-data>
</div>
parent.component.ts
@Component({
selector: 'app-short-form',
templateUrl: './short-form.component.html',
styleUrls: ['./short-form.scss'],
providers:[ShortFormService, TestDataService]
})
constructor(
private testDataService: TestDataService,
) { }
ngOnInit() {
this.testDataService.getTestData()
.subscribe(
(event: HttpEvent<any>) => {
switch (event.type) {
case HttpEventType.Response:
console.log('???? Done!', event.body);
}
},
(err: HttpErrorResponse) => {
if (err.error instanceof Error) {
console.log("Client-side error occured.");
} else {
console.log("Server-side error occured.");
}
}
)
}
test-data.component.html
<button m(click)="getTestData($event)" >Populate w/ match</button>
test-data.component.ts
@Component({
selector: 'app-test-data',
templateUrl: './test-data.component.html',
styleUrls: ['./test-data.component.scss'],
providers: [TestDataService]
})
constructor(
private testDataService: TestDataService,
) { }
getTestData(event){
event.preventDefault();
this.testDataService.getTestData()
.subscribe(
(event: HttpEvent<any>) => {
switch (event.type) {
case HttpEventType.Response:
console.log('???? Done!', event.body);
}
},
(err: HttpErrorResponse) => {
if (err.error instanceof Error) {
console.log("Client-side error occured.");
} else {`enter code here`
console.log("Server-side error occured.");
}
}
)
}
test-data.service.ts
constructor(
private http:HttpClient
) { }
getTestData(): Observable<HttpEvent<any>> {
const req = new HttpRequest('POST', this.testDataUrl, {
reportProgress: true,
});
var result = this.http.request(req).share();
return result
【问题讨论】: