2016-07-30 7 views
0

router-outlet을 캡슐화하는 간단한 구성 요소가 있습니다. 이벤트를 발생시키는 간단한 서비스를 설정했습니다. 이 이벤트는 구성 요소 및 업데이트 변수에 의해 캡처 된 다음 [보기]에서 [클래스]를 업데이트합니다.Angular2 : 변수가 변경되면보기가 업데이트되지 않습니다.

Sidebar.component.ts

import { Component, OnInit } from '@angular/core'; 
import { ROUTER_DIRECTIVES } from '@angular/router'; 
import { SidebarService } from '../sidebar.service'; 
import { Subscription } from 'rxjs/Subscription'; 

@Component({ 
    moduleId: module.id, 
    selector: 'app-sidebar', 
    templateUrl: 'sidebar.component.html', 
    styleUrls: ['sidebar.component.css'], 
    directives: [ROUTER_DIRECTIVES] 
}) 

export class SidebarComponent implements OnInit { 
    showSidebar:boolean = false; 
    subscription:Subscription; 

    constructor(public sidebarService: SidebarService) { 
    this.subscription = this.sidebarService.sidebarEvent$.subscribe(this.toggleSidebar); 
    } 

    ngOnInit() { 

    } 

    toggleSidebar (state) { 
    console.log(state); 
    this.showSidebar = state; 
    } 
} 

sidebar.service.ts 나는이 시도

import { Injectable, EventEmitter } from '@angular/core'; 
import {BehaviorSubject} from 'rxjs/BehaviorSubject'; 

@Injectable() 
export class SidebarService { 

    private _sidebarEventSource = new BehaviorSubject<boolean>(false); 
    sidebarEvent$ = this._sidebarEventSource.asObservable(); 
    constructor() { } 

    open() { 
    this._sidebarEventSource.next(true); 
    } 

    close() { 
    this._sidebarEventSource.next(false); 
    } 

} 

: Angular2: view is not updated from inside a subscription.

Error: ORIGINAL EXCEPTION: TypeError: Cannot read property 'run' of undefined 

저는 ng-cli을 사용하여 내 앱을 비계했습니다.

말할 필요도없이, 나는 angular2에 완전히 익숙하지 않았으며 ng1에 배경이있었습니다. 그래서 이런 코딩 스타일은 나에게 새로운 세계를 보여줍니다.

그리고 btw, 들러 주셔서 감사합니다. :)

답변

1
constructor(public sidebarService: SidebarService) { 
    this.subscription = this.sidebarService.sidebarEvent$.subscribe((data)=>{ 
     this.toggleSidebar(data); 
    }); 
} 
+0

고마워요. 그것은 효과가 있었다. 그러나 이전에 기능이 호출되고 콘솔 출력이오고 있었던 이유를 설명 할 수 있습니까? 그러나보기가 업데이트되지 않았습니까? – ankitjain11

+0

이전 코드로 콘솔을 다시 확인하십시오. 매번 바뀌지 않는 것 같아요. – micronyks

관련 문제