Вы действительно можете использовать службу, если хотите поделиться объектом с другой страницей.
Идея довольно проста - вы передаете пользователя какой-то службе, а затем переходите на страницу.Страница, когда она загружается, будет извлекать пользователя из сервиса.
interface User {
id: number;
name: string;
surname: string;
email: string;
}
@Injectable({providedIn: 'root'})
export class ActiveUserProvider {
private _user: User;
public get user(): User {
return this._user;
}
public set user(value: User) {
this._user = user;
}
}
Мы можем добавить этот сервис в ваш компонент с помощью таблицы и кнопки редактирования:
@Component()
export class TableComponent {
// inject the service
constructor(
private activeUser: ActiveUserProvider,
private router: Router)
{}
goToEditPage(user: User) {
this.activeUser.user = user;
this.router.navigate(['edit']);
}
}
Простовызовите метод goToEditPage
от нажатия вашей кнопки:
<button (click)="goToEditPage(user)">EDIT</button>
И тогда ваша страница редактирования будет выглядеть так
@Component()
export class EditUserComponent implements OnInit {
public user: User;
constructor(private activeUser: ActiveUserProvider) {}
public ngOnInit() {
this.user = this.activeUser.user;
}
}
Некоторые преимущества этого подхода:
- Отдельный сервис со строгими типами для контроля того, что совместно используется компонентами
- Поскольку это отдельный сервис для инъекций, теперь мы можем легко протестировать два компонента по отдельности: мы можем проверить, чтокомпонент таблицы устанавливает активного пользователя по нажатию кнопки «редактировать»;мы также можем проверить, что компонент edit получает активного пользователя при инициализации.