Angular 2 Component监听服务变化

标签 angular angular2-services angular2-changedetection

我有一个关于变化检测的简单问题。

我有一个组件和一个内部有 bool 值的(全局)服务。 如何让组件监听该 bool 值并在该 bool 值发生变化时执行函数?

谢谢!

最佳答案

根据该 bool 值的变化方式,您可以将其公开为 Observable<boolean>在您的服务上,然后在您的组件中订阅该流。您的服务看起来像:

@Injectable()
export class MyBooleanService {
    myBool$: Observable<boolean>;

    private boolSubject: Subject<boolean>;

    constructor() {
        this.boolSubject = new Subject<boolean>();
        this.myBool$ = this.boolSubject.asObservable();
    }

    ...some code that emits new values using this.boolSubject...
}

然后在你的组件中你会有这样的东西:

@Component({...})
export class MyComponent {
    currentBool: boolean;

    constructor(service: MyBooleanService) {
        service.myBool$.subscribe((newBool: boolean) => { this.currentBool = newBool; });
    }
}

现在,根据您需要对该 bool 值执行的操作,您可能需要执行一些其他操作来让您的组件更新,但这是使用可观察对象的要点。请注意,您需要在某个时候取消订阅 myBool$ 流,以防止内存泄漏和意外的副作用。

另一种选择是在模板中使用异步管道,而不是在构造函数中显式订阅流。这也将确保自动处理订阅。不过,这又取决于您究竟需要对 bool 值做什么。

关于Angular 2 Component监听服务变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36261829/

相关文章:

resize - 如何对 div 调整大小执行变化检测

javascript - Angular 2,带 setter 的 @Input 的行为是否与不带 setter 的 @Input 不同?

Angular 变化检测 NgIf

node.js - 在 docker 容器内调试 Angular

Angular 库 : Material Menu : Error: Export of name 'matMenu' not found

angular - 重定向到 Angular 中的上一页

javascript - angular2 http拦截器和注入(inject)SlimLoadingBarService不起作用?

javascript - 多次出现相同的自定义指令Angular2

Angular 2 客户端错误

angular - 在 Angular 4.0.0-rc.1 中使用 Angular Material 2 Tabs 组件