Мне нужно установить значение в одном компоненте (компонент A) и получить значение в другом компоненте (компонент B).Компонент A и Компонент B не являются родительскими и дочерними.
Я создал общую службу для обмена данными между двумя компонентами.Я могу установить значение из компонента B, но когда я подписываюсь, чтобы получить значение в компоненте A, оно не срабатывает.
Вот что я попробовал:
Я добавил Сервис в массиве @NgModule
providers
в файле appmodule.ts
, чтобы он был доступен для всех компонентов в проекте.
Сервисный код:
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from '../../node_modules/rxjs';
@Injectable({
providedIn: 'root'
})
export class SocialService {
constructor() { }
private valueObs: BehaviorSubject<string> = new BehaviorSubject<string>(null);
public setValue(value: string):void {
this.valueObs.next(value);
this.getValue();
}
public getValue():Observable<string> {
return this.valueObs;
}
}
Компонент B: Значение настройки здесь
@Component({
selector: 'app-componentb',
templateUrl: './componentb.component.html',
styleUrls: ['./componentb.component.scss']
})
constructor(private socialService: SocialService, private http: HttpClient) {
}
buttonClick()
{
this.socialService.setValue("linked successfully");
}
Компонент A: Get Value Here
@Component({
selector: 'app-componenta',
templateUrl: './componenta.component.html',
styleUrls: ['./componenta.component.scss']
})
constructor(private socialService: SocialService, private http: HttpClient) {
this.socialService.getValue().subscribe(data=>{
console.log('Trigger from ComponentB');
console.log(data);
});
}
Триггер в ComponentA вызывается, когда ComponentA загружается с данными null
.Но это не вызывается, когда buttonClick вызывается из ComponentB.
ОБНОВЛЕНИЕ :
Я понял проблему, я должен был правильно сформулировать свой вопрос.Когда ComponentA и ComponentB находятся на одной странице (URL), код работает отлично.
Как отправить данные между 2 компонентами, когда они находятся на 2 разных страницах (URL).
Пример: пользователь открывает URL1 (Renders ComponentA), на котором есть кнопка, пользователь нажимает кнопку и перенаправляется на URL2 (Renders ComponentB) на новой вкладке, на которой есть кнопка, когда пользователь нажимает кнопку,Мне нужно передать некоторые данные в ComponentA и закрыть URL2.Мне нужно извлечь данные, переданные в ComponentB и использовать его в URL1.Возможно ли использование Сервисов?Если нет, какой подход я должен следовать?