Angular 中的服务:使用 @Injectable 和 @Injectable()装饰器

阅读时长 3 分钟读完

在 Angular 中,服务是一种可以提供应用程序各种功能的机制。 Angular 中的服务可以被注入到组件,指令,管道和其他服务中,以实现代码的重用和模块化。

在 Angular 中定义服务时,通常使用 @Injectable 装饰器。这个装饰器告诉 Angular,这个类是一个可以被注入到其他类中的服务。

@Injectable 装饰器

@Injectable 装饰器是 Angular 内置的一个装饰器,可以将一个类标记为一个服务。在使用这个装饰器时,需要使用 TypeScript 中的装饰器语法:

在这个例子中,MyService 类被标记为一个服务,并使用@Injectable() 装饰器进行修饰。

@injectable 装饰器

除了内置的 @Injectable 装饰器,你还可以使用一个名为@injectable 的函数作为装饰器。这个函数是一个 Angular 的实现细节,它做了和@Injectable 一样的事情,但这个函数在一些特殊的情况下会更有用。

比如,你可能需要将你的服务作为一个基类使用,这时你就需要使用@injectable 装饰器来保证派生类可以正常注入父类的服务:

-- -------------------- ---- -------
----- --------------- -
  -------------- ---- --
-

-------------
----- --------- ------- --------------- -
  ------------------- ------------- ------------- -
    --------
  -

  --------------------- ---- -
    ------------------------------------
  -
-

在这个例子中,MyService 继承了 MyParentService 类, 并且向它自己的构造函数中注入了其他的服务。

总结

在 Angular 中定义服务时,你可以使用 @Injectable 或者 @injectable 装饰器。这两个装饰器都可以将一个类标记为一个服务,并使其可以被注入到其他的类中。

传统上来说,使用 @Injectable 装饰器更加常见,而当你需要将你的服务用作基类时,使用 @injectable 装饰器会更加有用。在选择使用哪个装饰器时,请根据自己的需求进行决定,以达到最好的效果。

示例代码

下面的代码演示了如何使用 @Injectable 或者 @injectable 装饰器定义一个服务。

-- -------------------- ---- -------
------ - ---------- - ---- ----------------

-------------
  ----------- ------
--
------ ----- --------- -
  ------------- -
    ---------------------- -------- ----------
  -

  -------------- ---- -
    -------------------- ----- ------------
  -
-

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649562ea48841e9894295255

纠错
反馈