Отправка данных из класса TS в угловой компонент через сервис - PullRequest
0 голосов
/ 05 мая 2019

За пределами проекта Angular существует класс TS, из которого я пытаюсь отправить объект в угловой компонент через сервис.

sender.ts - это класс TS, который отправляет объект с использованием службы Angular;

export class Sender {

  injector;
  servicePointer;
  myData: Object;

  constructor() {

    this.injector = Injector.create({
      providers: [
        {
          provide: ShareDataService,
          deps: []
        },
      ]
    });

    this.servicePointer = this.injector.get(ShareDataService);
  }

  public send() {
    this.myData = {
      name: "Robert",
      visible: true
    }

    return this.servicePointer.dataVisibility(this.myData);
  }
}

share-data.service.ts - это служба Angular, которая успешно получает объект из sender.ts класса:

@Injectable({
  providedIn: 'root'
})
export class ShareDataService {

  changeDataSource = new BehaviorSubject<Object>({});

  public dataUpdate$ = this.changeDataSource.asObservable();

  public dataVisibility = (dataInfo: Object) => {
    //console.log(dataInfo);
    this.changeDataSource.next(dataInfo);
  }
}

app.component.ts включает класс Sender TS и вызывает метод .send():

export class AppComponent implements OnInit {
  private foo:Sender.Sender = new Sender.Sender();

  constructor() {}

  ngOnInit() {
    this.foo.send();
  }
}

По крайней мере, есть компонент receive, который подписывается на услугу:

export class ReceiverComponent implements OnInit {
  constructor(private shareDataService: ShareDataService) { }

  receivedData;

  ngOnInit() {
    this.shareDataService.dataUpdate$.subscribe(success => {
      this.receivedData = success;
      console.log(this.receivedData);
    })
  }
} 

и всегда возвращает пустой объект из службы, хотя объект с данными поступает в службу (console.log (dataInfo)).

Что может вызвать проблему? В service есть

@Injectable({
   providedIn: 'root'
})

декоратор с корневым приложением-инжектором и в классе sender также есть инжектор из сервиса. Может ли это быть проблемой? Если так, есть ли другой способ внедрить услугу? Существует также stackblitz с кодом, описанным выше.

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