2017-09-28 7 views
0

나는 observables를 사용하여 다른 구성 요소와 통신하는 Angular 2/4 서비스를 가지고 있습니다.앵귤러 서비스가 가입 된 구성 요소를 업데이트하지 않음

서비스 :

let EVENTS = [ 
    { 
     event: 'foo', 
     timestamp: 1512205360 
    }, 
    { 
     event: 'bar', 
     timestamp: 1511208360 
    } 
    ]; 

@Injectable() 
export class EventsService { 

    subject = new BehaviorSubject<any>(EVENTS); 

    getEvents(): Observable<any> { 
    return this.subject.asObservable(); 
    } 

    deleteEvent(deletedEvent) { 
    EVENTS = EVENTS.filter((event) => event.timestamp != deletedEvent.timestamp); 
    this.subject.next(EVENTS); 
    } 

    search(searchTerm) { 
    const newEvents = EVENTS.filter((obj) => obj.event.includes(searchTerm)); 
    this.subject.next(newEvents); 
    } 
} 

home 구성 요소는이 서비스에 가입 할 수 있으며, 올바르게 이벤트가 삭제 될 때 업데이트 :

export class HomeComponent { 

    events; 
    subscription: Subscription; 

    constructor(private eventsService: EventsService) { 
    this.subscription = this.eventsService.getEvents().subscribe(events => this.events = events); 
    } 

    deleteEvent = (event) => { 
    this.eventsService.deleteEvent(event); 
    } 
} 

내가도를 표시하는 루트 구성 요소가 검색 양식. 양식이 제출되면 검색을 수행하는 서비스를 호출하고 this.subject.next을 호출합니다 (위 참조). 그러나 이러한 결과는 home 구성 요소에 반영되지 않습니다. 내가 어디로 잘못 가고 있니? 전체 코드는 plnkr.co/edit/V5AndArFWy7erX2WIL7N을 참조하십시오.

답변

1

서비스를 여러 번 제공하는 경우 발신자와 수신자가 동일한 인스턴스를 사용하지 않기 때문에 여러 인스턴스가 생성되고 통신에는 작동하지 않습니다.

전체 응용 프로그램에 대한 단일 인스턴스를 얻으려면 AppModule의 서비스를 제공하고 다른 곳은 제공하지 마십시오.

Plunker example