我们什么时候需要在Angular中创建服务?

时间:2017-12-26 03:51:01

标签: angular typescript angular-services

例如,我有一些函数fooA()fooB() ...在许多组件中使用。

我应该将这些方法包装在服务类中并注入它们,还是只导出具有这些静态函数的类?

包裹服务:

...
@Injectable()
export class SampleService {
    fooA() {...}

    fooB() {...}
}

@Component({
    ...
    providers: [SampleService]
})
export class SampleComponent {
    constructor(private sampleService: SampleService) {...}

    method() {
        this.sampleService.fooA();
    }
}

只需导出一个类:

export class Utils {
    static fooA() {...}

    static fooB() {...}
}

@Component({...})
export class SampleComponent {
    method() {
        Utils.fooA();
    }
}

3 个答案:

答案 0 :(得分:2)

如果您有重复使用的方法,则应创建shared service。或者使用这些方法创建基本组件,并从 base component 扩展您的组件。

答案 1 :(得分:2)

您通常可以创建角度服务,以在组件之间共享不一定与父子关系或兄弟组件的功能。这样,您可以更好地将所需的功能封装在一个服务中,并将其注入要使用它的组件构造函数中。

例如,如果要创建Async通信以在两个组件之间共享数据,则可以使用 RxJS库创建服务,并让组件订阅他们想要获取的消息,或者创建主题以将数据发送到其他组件。

你可以在这里阅读一些例子:

angular component interaction

ways-to-communicate-between-angular-components

对于您的示例,为了更好的设计和代码封装,您可以使用Injectable decorator创建角度服务,而不是在每个组件中复制fooA()fooB()的功能,在需要调用这些函数的每个组件中注入该服务。

当您选择导出这些功能时,它们将可用于每个组件,而您可以选择仅通过注入服务来使用它们。

答案 2 :(得分:1)

当这些函数的逻辑非常全局且不会在应用程序中发生变化时,您应该使用静态函数。

当我们想要使用特定类中的函数,即私有函数或当另一个类需要它时,即公共函数时,创建具有非静态函数的服务。此外,如果一个类想要覆盖超类(它继承自的类)的实现,我们将该函数定义为非静态成员。

如果您的逻辑是全局的并且不会在整个应用程序中发生变化,请将它们用作静态函数,否则会使它们成为非静态成员。