这是我的数据服务:
private resultsChanged$: BehaviorSubject<Test[]> =
new BehaviorSubject<any>([]);
constructor(private http: Http) { }
public getLatestTrends(): Observable<Test[]> {
const latestUrl = `api/tests/trends/groupname=${this.group}&name=${this.team}`;
return this.http.get(this.baseUrl + latestUrl)
.switchMap((res) => {
const json = res.json();
console.log(json);
this.resultsChanged$.next(json as Test[]);
return json;
});
}
public getSubject(): Observable<Test[]> {
return this.resultsChanged$.asObservable();
}
这是使用 DataService 并格式化返回数据的组件:
private latestTests: Test[];
private subscription: Subscription;
constructor(private testDataService: TestDataService) { }
ngOnInit() {
this.subscription = this.testDataService.getSubject()
.subscribe((res) => {
if (res === undefined || res.length < 1) {
return;
}
this.latestTests = this.getFormattedTests(res.reverse());
});
}
getFormattedTests(trends) {
let formattedTests = [];
if (trends === undefined || trends === null) {
return formattedTests;
}
formattedTests = trends.map((trend) => {
if (this.isPassed(trend.ran, trend.passed, trend.total)) {
trend.state = 'check_circle';
trend.color = 'green';
} else {
trend.state = 'warning';
trend.color = 'red';
}
const ranPercent = this.getFixedPercent(trend.ran, trend.total);
const passPercent = this.getFixedPercent(trend.passed, trend.ran);
const failPercent = this.getFixedPercent(trend.failed, trend.ran);
trend.notRun = trend.total - trend.ran;
trend.ran = `${trend.ran} (${ranPercent})`;
trend.passed = `${trend.passed} (${passPercent})`;
trend.failed = `${trend.failed} (${failPercent})`;
return trend;
});
return formattedTests;
}
的HTML
<tr *ngFor="let test of latestTests">
<td>
<span><md-icon [ngStyle]="getStateOfBuild(test)">{{test.state}}</md-icon> {{test.versionString}}</span>
</td>
<td>{{test.total}}</td>
<td>{{test.ran}}</td>
<td>{{test.passed}}</td>
<td>{{test.failed}}</td>
<td>{{test.notRun}}</td>
<td></td>
<td>{{test.duration | duration }}</td>
</tr>
好的,事情是这样的,当网站加载时,数据被格式化并保存在 latestTests 变量中。当我在我的路线之间循环以便再次调用 ngInit 时,数据会再次格式化,我不明白。奇怪的是,当我 console.log(json); 在 DataService 中,它会注销格式化的数据,而不是原始数据……这怎么可能?!就好像 BehaviorSubject 的数据以某种方式发生了变化。我错过了什么?
如果我需要澄清,请帮助和评论。