使用依赖于另一个服务中的服务的管道
Use a pipe which depends on a service in another service
在一个服务A中,我需要使用一个管道P,这个管道P需要一个服务B才能工作。到目前为止我做了这样的事情:
我的P管道定义
export class PPipe implements PipeTransform {
constructor(private aService: AService) {}
transform(value:number) : string {
return number.toString();
}
}
我如何在服务 B 中使用它
@Injectable()
export class BService {
pPipe = new PPipe();
myFn() {
const nbToStr = pPipe.transform(69);
}
}
但是构建时出现错误:Expected 1 arguments, but got 0.
。
每次我想使用它时都需要传递一个 PPipe 实例吗?如果是这样,如何从 HTML 模板中实现?
感谢您的帮助
您需要注入管道。
如果你自己用 new
创建东西,Angulars DI 没有办法交互。
export class BService {
constructor(private pPipe:PPipe) {}
这样 Angular 创建一个 PPipe
实例并将依赖项传递给它的构造函数。
正如另一个答案所解释的那样,可以通过将管道公开为提供者(默认情况下它不是提供者)并将其作为任何其他服务注入来解决。这样 AService
将被 Angular 注入器注入 PPipe
。
手动使用管道 transform
的唯一合适情况是管道是第三方的并且包含仅在管道 class 中可用的有用代码(例如 Angular 内置-在管道中)。
如果管道是第一方的,正确的处理方法是不调用管道 transform
,而是直接在 BService
中使用 AService
。管道必须重构为尽可能纤细,而 AService
包含重用管道功能所需的所有代码。
在一个服务A中,我需要使用一个管道P,这个管道P需要一个服务B才能工作。到目前为止我做了这样的事情:
我的P管道定义
export class PPipe implements PipeTransform {
constructor(private aService: AService) {}
transform(value:number) : string {
return number.toString();
}
}
我如何在服务 B 中使用它
@Injectable()
export class BService {
pPipe = new PPipe();
myFn() {
const nbToStr = pPipe.transform(69);
}
}
但是构建时出现错误:Expected 1 arguments, but got 0.
。
每次我想使用它时都需要传递一个 PPipe 实例吗?如果是这样,如何从 HTML 模板中实现?
感谢您的帮助
您需要注入管道。
如果你自己用 new
创建东西,Angulars DI 没有办法交互。
export class BService {
constructor(private pPipe:PPipe) {}
这样 Angular 创建一个 PPipe
实例并将依赖项传递给它的构造函数。
正如另一个答案所解释的那样,可以通过将管道公开为提供者(默认情况下它不是提供者)并将其作为任何其他服务注入来解决。这样 AService
将被 Angular 注入器注入 PPipe
。
手动使用管道 transform
的唯一合适情况是管道是第三方的并且包含仅在管道 class 中可用的有用代码(例如 Angular 内置-在管道中)。
如果管道是第一方的,正确的处理方法是不调用管道 transform
,而是直接在 BService
中使用 AService
。管道必须重构为尽可能纤细,而 AService
包含重用管道功能所需的所有代码。