Задать вопрос
@Galdar
Web, JS, PHP, NGINX, Linux

Как передать переменную из компонента в другие компоненты?

Знатоки, в вопросе ничего сложного, но столкнулся с таким вот вопросом. Возможно так сделать нельзя и я зря ломаю голову, но все же.

Вот главный компонент
app.component.html

<div id="main-window">

    <div class="nav-menu">

        <app-menu></app-menu>
    </div>

    <div class="compnent-body" >
    

        <router-outlet></router-outlet>
        

    </div>


</div>



В нем есть компонент app-menu, который вызывает меню и в этом меню есть возможность выбора даты. По событию click вызывается функцию в которой вызывается сервис memory.service.ts
memory.service.ts

iimport { Injectable, SimpleChanges } from '@angular/core';
import { BehaviorSubject, Subject } from 'rxjs';
import { DynamicMemory, Memory } from '../interface/memory';

@Injectable({
  providedIn: 'root'
})

export class MemoryService {

  // Память сохраненных данных
  public memory: Memory = {
    "token": '',
    "fonts": []
  };

  private dynamicMemory:Subject<DynamicMemory> = new BehaviorSubject<DynamicMemory>({
    "search_date": new Date()
  });
  
  constructor() { }


  get getData$(){
    return this.dynamicMemory;
  }

  setData$(data:DynamicMemory){
    this.dynamicMemory.next(data);
  }

}



В dynamicMemory записывается объект с данными, на него создана подписка и если вызывать в других компонентах этот сервис memory.service.ts с подпиской, то да, я получаю данные. Но вот как создать такую систему.

В компоненте app-menu выбирается дата, записывается в сервис memory.service.ts и другие компоненты опознают что было изменение в memory.service.ts и вызывают функцию. Таким образом я хочу связать на изменение два компонента которые вызываются в разных местах но на одной странице так как компонент меню показывается на основной странице, а все остальные компоненты вызываются в зависимости то роута . Вот в чем вопрос. Через инпут и отпут я так понял router-outlet не работает.

В принципе можно сделать через ngDoCheck, но, вообще прям НО, он вызывается на любое действие и загружать сайт нажатиям по итогу которое только 1 раз будет на изменение даты и вызовет функцию как то не очень. ПО этому и ищу способ более крутой, чтобы именно по изменению объекта, а лучше переменной в объекте вызывалась функция.
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы