Мне необходимо передать данные при переходе на другую страницу и сразу же отобразить их, я использую передачу данных благодаря localstorage, но я не понимаю, почему данные отображаются лишь со 2 раза.
Это main.component.ts:
import {Component, Input} from '@angular/core';
import {HttpClient} from "@angular/common/http";
import {IMetric} from "./metric";
import {Router} from "@angular/router";
@Component({
selector: 'home-app',
template: `
<div class="box" >
<p class="nameOfTheMetric">Halstead metric</p>
<textarea class="input_text" type="text" [(ngModel)]="code"></textarea>
<button (click)="goCalculate()" class="shine-button">Calculate the metric</button>
</div>
`
})
export class MainComponent {
code: string = "";
constructor(private http: HttpClient, private router: Router){ }
goCalculate(){
this.http.post<IMetric>("https://localhost:5001/api/Helstead", this.code)
.subscribe(
(data) => {localStorage.setItem('key', JSON.stringify(data))},
);
this.router.navigate(['/metric']);
};
}
А это metric.component.ts:
import {Component, Input} from '@angular/core';
import {Router} from "@angular/router";
@Component({
selector: 'about-app',
template: `
<div class="box">
<p class="resultOfTheMetric">Results of the Halstead metric</p>
<table class="tableOfOperators">
<caption class="nameOfTheTableOfOperators">Operators</caption>
<tbody>
<th>Value</th>
<th>Number of repetitions</th>
</tbody>
</table>
<table class="tableOfOperands">
<caption class="nameOfTheTableOfOperands">Operands</caption>
<tbody>
<th>Value</th>
<th>Number of repetitions</th>
</tbody>
</table>
<button (click)="goBack()" id="btn" class="shine-button">Go back</button>
</div>
<b>{{retrievedObject.numOfUniqueOperands}}</b>
`
})
export class MetricComponent {
retrievedObject = JSON.parse(<string>localStorage.getItem('key'));
constructor(private router: Router){}
goBack(){
this.router.navigate(['']);
}
}