Я обнаружил, что когда я пользуюсь службой внутри forEach, параметр, который я отправляю на услугу, выдает последний из тиражей.Angular2: как использовать наблюдаемое для вещательного события внутри forEach?
Я подумал, что это должно быть закрытия причины этой проблемой, поэтому я стараюсь использовать анонимную функцию, чтобы решить эту проблему, но не работает
Пропустите OBJ в компоненте
эта функция вызывается в
ngOnInit
может вызвать проблемы,, когда я ставлю этот код в событие щелчка, он отлично работает
for (var y = 0; y < this.model.data.length;y++) {
if (this.model.data[i].to[x].id === this.model.data[y].id) {
let obj = {
selectedItem : this.model.data[i],
item : this.model.data[y]
};
(function(_obj,a) {
console.log ('obje in component:');
console.log (_obj.item.id) //each obj over here is correct now
a._drawLineService.drawLine(_obj);
a._dragLineService.dragLine(_obj.item);
})(obj,this)
}
}
Получить OBJ в директиве
this.subscription = this._drawLineService.drawLine$
.subscribe(obj => {
console.log ('drawLine:')
console.log (obj.item.id) //each obj over here become the last one of array
});
Я использую наблюдаемую передать событие и параметр от компонента к директиве
Моя служба
import {Injectable} from '@angular/core'
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
@Injectable()
export class DrawLineService {
private _drawLine = new BehaviorSubject<any>('');
drawLine$ = this._drawLine.asObservable();
drawLine(item) {
this._drawLine.next(item);
}
}
консоли Результат:
Как решить эту проблему?
не работает: (все еще последний –
Я думаю, что это связано с порядком вашей подписки и вашей петли. Я выставил плункер, который работает: https://plnkr.co/edit/nR9PL5b8bS5OenZNJNBM?p=preview – user3682091
Я положил его в 'ngOnInit()', возможно, это вызвало эту проблему, когда я использую событие click для его запуска, он работает нормально, но почему? См. Этот plunker [https://plnkr.co/edit/alQFlYEFL3G6jvBsUl2s?p = preview] (https://plnkr.co/edit/alQFlYEFL3G6jvBsUl2s?p=preview) –