Я пытался найти решение, но мои знания DI в сфере услуг все еще слишком малы, чтобы заставить эту вещь работать - поэтому мне интересно, есть ли способ заставить эту работу вообще?
Мой setup: у меня есть общий Downloadservice, который получает данные от другого сервиса, а затем предоставляет ссылку для загрузки большого двоичного объекта в виде файла PDF. Мой код работает нормально, когда я внедряю только один источник, но я хочу сделать следующее: служба загрузки должна быть обобщенной c в зависимости от того, какой компонент требует своей функции. Это означает, что передаваемые данные в его конструкторе должны быть динамически.
Это фрагмент моего кода:
constructor(private dataservice: MusicService) { }
onDownload() {
this.dataservice.getDownloadData().subscribe(
(data) => {
const fileName = 'Report.pdf';
const blob = new Blob([data], { type: 'application/pdf' });
if (navigator.msSaveBlob) { // IE 10+
navigator.msSaveBlob(blob, fileName);
} else {
const link = document.createElement('a');
if (link.download !== undefined) {
const url = URL.createObjectURL(blob);
link.setAttribute('href', url);
link.setAttribute('download', fileName);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}
);
}
Все мои сервисы, которые будут внедрены, имеют getDownloadData ( ) -метод. Таким образом, единственная строка, которую я должен сделать динамически, это:
constructor(private dataservice: MusicService) { }
Есть ли способ сделать это?