Если вы предоставляете услугу в глобальном масштабе, она будет одноэлементной, поэтому любой компонент или служба будут иметь доступ к одному и тому же экземпляру, поэтому они будут видеть изменения друг друга. Но если вы предоставляете услугу в компоненте (см. DashboardWrapperComponent
ниже), она создаст новый экземпляр для этого компонента и его дочерних элементов независимо от того, существует ли глобально предоставленный экземпляр или нет. В этом случае только дочерние компоненты будут видеть изменения друг друга.
Так что это должно решить требование для других компонентов, переменная должна оставаться нетронутой .
@Component({
selector: 'app-dashboard-wrapper',
template: `
<div>
<app-child></app-child>
</div>
`,
provide: [
FancyService,
]
})
export class DashboardWrapperComponent {
}
Но в настоящее время у вас нет общего родителя для тех страниц, на которых вы хотите иметь экземпляр общего сервиса. Это может быть достигнуто следующим образом:
const routes: Routes = [
{
path: 'home',
component: DashboardWrapperComponent,
children: [
{
path: '',
component: WallComponent,
},
{
path: 'places',
component: PlacesComponent,
},
{
path: 'object/:id',
component: ObjectComponent,
},
],
},
{
path: '**',
redirectTo: 'home',
pathMatch: 'full',
},
];
@Component({
selector: 'app-dashboard-wrapper',
template: `
<router-outlet></router-outlet>
`,
provide: [
FancyService,
]
})
export class DashboardWrapperComponent {
}
Я знаю, что у вас ''
как маршрут root, я не уверен, что вы можете иметь ''
на 2 уровнях маршрутов, например , для DashboardWrapperComponent
и WallComponent
, поэтому я добавил туда 'home'
.