За пределами проекта 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 с кодом, описанным выше.