在 Angular 中,服务是一种可以提供应用程序各种功能的机制。 Angular 中的服务可以被注入到组件,指令,管道和其他服务中,以实现代码的重用和模块化。
在 Angular 中定义服务时,通常使用 @Injectable 装饰器。这个装饰器告诉 Angular,这个类是一个可以被注入到其他类中的服务。
@Injectable 装饰器
@Injectable 装饰器是 Angular 内置的一个装饰器,可以将一个类标记为一个服务。在使用这个装饰器时,需要使用 TypeScript 中的装饰器语法:
@Injectable() export class MyService { // service code here }
在这个例子中,MyService 类被标记为一个服务,并使用@Injectable() 装饰器进行修饰。
@injectable 装饰器
除了内置的 @Injectable 装饰器,你还可以使用一个名为@injectable 的函数作为装饰器。这个函数是一个 Angular 的实现细节,它做了和@Injectable 一样的事情,但这个函数在一些特殊的情况下会更有用。
比如,你可能需要将你的服务作为一个基类使用,这时你就需要使用@injectable 装饰器来保证派生类可以正常注入父类的服务:
-- -------------------- ---- ------- ----- --------------- - -------------- ---- -- - ------------- ----- --------- ------- --------------- - ------------------- ------------- ------------- - -------- - --------------------- ---- - ------------------------------------ - -
在这个例子中,MyService 继承了 MyParentService 类, 并且向它自己的构造函数中注入了其他的服务。
总结
在 Angular 中定义服务时,你可以使用 @Injectable 或者 @injectable 装饰器。这两个装饰器都可以将一个类标记为一个服务,并使其可以被注入到其他的类中。
传统上来说,使用 @Injectable 装饰器更加常见,而当你需要将你的服务用作基类时,使用 @injectable 装饰器会更加有用。在选择使用哪个装饰器时,请根据自己的需求进行决定,以达到最好的效果。
示例代码
下面的代码演示了如何使用 @Injectable 或者 @injectable 装饰器定义一个服务。
-- -------------------- ---- ------- ------ - ---------- - ---- ---------------- ------------- ----------- ------ -- ------ ----- --------- - ------------- - ---------------------- -------- ---------- - -------------- ---- - -------------------- ----- ------------ - -
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649562ea48841e9894295255