可观察的不会触发

时间:2016-07-21 12:48:54

标签: javascript typescript angular

我有两个应该通过Observable()连接的组件。

在我宣布的第一个

@Injectable()
export class One{
    private changeConfirmed = new Subject<boolean>();

    changeConfirmed$ = this.changeConfirmed.asObservable();
    public init$: EventEmitter<boolean>;

    registerChangeConfirmed(category:boolean){
        alert('sending')
        this.changeConfirmed.next(category);
    }

    onMsg(){
        this.registerChangeConfirmed(true);
    }
}

onMsg是绑定到模板的事件

并在第二个

Import { One } from './pat/to/it'
@Component({
    providers:[One]
})

export class two{
    constructor( private childClass : One ){
        this.childClass.changeConfirmed$.subscribe( x => {alert(x)})
    }
}

但事件不会被发出。 但是当我在第二类而不是第一类中发出事件时,我包括

this.childClass.registerChangeConfirmed(true)

在第二课中,事件被触发。当我从第一课调用它时,为什么它不起作用?

1 个答案:

答案 0 :(得分:0)

不要在组件上提供服务One。这样,每个组件实例都将获得自己的One实例。如果您在公共父级(AppComponent)提供,那么他们将获得共享实例。

Angular2 DI为每个提供商维护一个实例(单例)。