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

问题描述 投票:1回答:3

例如,我有一些函数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();
    }
}
angular typescript angular-services
3个回答
2
投票

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


1
投票

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

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

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

angular component interaction

ways-to-communicate-between-angular-components

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

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


1
投票

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

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

如果您的逻辑是全局的并且不会在应用程序中进行更改,请将它们用作静态函数,否则将它们设置为非静态成员。

© www.soinside.com 2019 - 2024. All rights reserved.