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

时间:2018-02-23 17:47:04

标签: angular

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

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

1 个答案:

答案 0 :(得分:7)

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

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

然后我使用MH-Take4文件夹中的简单属性与没有主题/行为主题和相当少的代码使用完全相同的功能。

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

例如:

get showImage(): boolean {
    return this.movieParameterService.displayPosters;
}
set showImage(value: boolean) {
    this.movieParameterService.displayPosters = value;
}

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

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