Обмен данными с сервисом между несвязанными компонентами не работает - PullRequest
0 голосов
/ 23 сентября 2019

Я создал общую службу данных, которая должна отправлять выпадающий выбор из 1 компонента в компонент, который является внуком его брата.но я не могу заставить его работать.

Общая служба:

@Injectable()
export class LiveDataService {
    private subject: BehaviorSubject<MyData> = new BehaviorSubject<MyData>(null);

    public currentValue(): MyData {
        return this.subject.value;
    }

    public changeValue(data: MyData): void {
        this.subject.next(data);
    }

    public getValue(): Observable<MyData> {
        return this.subject.asObservable();
    }
}

Отправка компонента

@Component({
})
export class MainComponent {
    constructor(private liveDataService: LiveDataService) {}

    onDropdownChange() {
        this.liveDataService.changeValue({id: event.value} as MyData);
    }
}

Получение компонента

@Component({
})
export class AnotherComponent implements OnInit {

    constructor(private liveDataService: LiveDataService) {}

    ngOnInit() {
        this.liveCutoffData.getValue().subscribe((myData) => {
            this.myData = myData;
            this.doSomething(this.myData);
       });
    }
}

my.module.ts

@NgModule({
    declarations: [
        MainComponent,
        AnotherComponent,
    ],
    imports: [
        ...
    ],
    providers: [
        LiveDataService,
    ],
  })
export class MyModule {
}

Из журналов видно, что MainComponent отправляет изменения.Однако AnotherComponent не получает эти изменения, и ничего не происходит

1 Ответ

1 голос
/ 23 сентября 2019

Измените @Injectable() на @Injectable({ providedIn: 'root'}) на услуге, которая гарантирует, что она будет зарегистрирована как одноразовая служба с угловой скоростью.

@Injectable({providedIn: 'root'})
export class LiveDataService {
  // ...

См. Также Предоставление одноразовой услуги

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...