直接绑定到服务属性有什么危害?

tob*_*gue 6 angular

创建服务的方法是否有任何损害,该服务包含我的角度应用程序的某些状态,将该服务注入到状态调节的组件中,然后在其模板中直接绑定到该服务的相应属性?

我经常看到主题用于触发组件之间的状态更新,并且想知道是否存在上述方法不起作用且必须使用主题的情况.

Deb*_*ahK 7

我经常发现开发人员没有利用Angular中可用的绑定和更改检测,并且在他们不需要时使用Subjects基本上绕过它.

例如,我在这里有一个完整的主题/行为主题示例:MH-Take3文件夹中的https://github.com/DeborahK/MovieHunter-communication.

然后,我有确切的MH-Take4文件夹使用简单的特性与相同的功能没有主题/ BehaviorSubject和相当少一点的代码.

但是,我建议的一件事是将您的服务属性包装到组件属性中,以便您的模板不需要知道您的服务.这不是必需的,但提供了良好的封装.

例如:

get showImage(): boolean {
    return this.movieParameterService.displayPosters;
}
set showImage(value: boolean) {
    this.movieParameterService.displayPosters = value;
}
Run Code Online (Sandbox Code Playgroud)

我有一个"参数"服务,保留我的一个视图的参数.在这种情况下,它保留用户是否打开或关闭图像的显示.我使用组件中的getter和setter公开service参数.这样,模板绑定到组件,不需要知道服务.

除了封装的基本优点之外,这还使得更容易使用编辑器功能,例如"查找所有引用",因为它将找到使用该服务的组件.如果唯一的引用是在模板中的字符串中,它将找不到任何引用.

  • 正如@DeborahK所说,开发人员经常看到主题提供的令人兴奋的事情,并在简单的情况下过度使用它.我采取了一个演示BehaviourSubject的插件:http://plnkr.co/edit/zNIwBG?p = info并修改它以"直接"使用该服务:http://plnkr.co/edit/7O1vO1?p = info - 直接方法可以说更清晰,更容易理解. (2认同)