Я немного огляделся, но, похоже, нет никакого материала для обмена данными между службами в Angular2. У меня есть две службы @Injectable(), где один является Singleton, который передает данные. В другой службе, у меня есть код, который обновляет переменную прогресс как веб-аудио дорожки играет:Обмен данными через службы в угловом 2
import { SharedService } from '../shared.service';
...
@Injectable()
export class WebAudioTrack implements IAudioTrack {
public _progress: number = 0;
...
constructor(public src: string, @Optional() public preload: string = 'none', @Optional() private ctx: AudioContext = undefined) {
// audio context not needed for now
// this.ctx = this.ctx || new AudioContext();
this.createAudio();
}
private onTimeUpdate(e: Event) {
if (this.isPlaying && this.audio.currentTime > 0) {
# I want to do something like SharedService.setProgress(this.audio.currentTime) here
this._progress = this.audio.currentTime;
this._completed = this.audio.duration > 0 ? Math.trunc (this.audio.currentTime/this.audio.duration * 100)/100 : 0;
}
}
Я ищу способ транслировать переменную _progress в коде выше к другому @Injectable называется SharedService , Мне даже не нужно настраивать BehaviorSubject в приведенном выше коде, потому что я должен просто делать что-то вроде SharedService.setProgress (время) при каждом запуске onTimeUpdate.
Вопрос в том, как я могу добавить SharedService в код выше? Когда я пытаюсь добавить его в конструктор, он жалуется, потому что есть призывы к «новому WebTrackAudio (переменная, переменная)». Вот другой код обслуживания, который является неполным и может быть немного запутанным:
@Injectable()
export class SharedService {
progress: number;
setProgress(progress: number) {
console.log(progress);
this.progress = progress;
}
getProgress() {
return this._webTrack._progress;
}
}
Спасибо!
Когда я обновляю конструктор в первой службы включить SharedService так:
constructor(public src: string, @Optional() public preload: string = 'none', @Optional() private ctx: AudioContext = undefined, public sharedService: SharedService) {
// audio context not needed for now
// this.ctx = this.ctx || new AudioContext();
this.createAudio();
}
Я получаю следующее сообщение об ошибке:
машинопись Ошибка
Supplied parameters do not match any signature of call target.
.../src/app/ionic-audio/ionic-audio-providers.ts
create(track: ITrackConstraint) {
let audioTrack = new WebAudioTrack(track.src, track.preload);
Object.assign(audioTrack, track);
Уверен, что вы достигли сути проблемы, которую вы могли бы удалить 2/3 кода. Я нахожу это довольно запутанным, что проблема на самом деле от всего шума. Для обмена данными между службами вы можете просто вводить услугу в другую, если вы не вызываете круговых зависимостей. –
Что вы подразумеваете под «добавлением к конструктору»? Зачем вам нужен вызов 'new WebTrackAudio (переменная, переменная)', если это услуга? –
Я фактически удалил около 90% кода уже (вы можете увидеть ... s). Я предполагаю, что это не сервис? Что тогда? У меня все еще мои ноги мокрые с angular2 – user2476265