Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 使用依赖于另一个服务中的服务的管道_Angular_Dependency Injection_Angular Services_Angular Pipe - Fatal编程技术网

Angular 使用依赖于另一个服务中的服务的管道

Angular 使用依赖于另一个服务中的服务的管道,angular,dependency-injection,angular-services,angular-pipe,Angular,Dependency Injection,Angular Services,Angular Pipe,在服务a中,我需要使用管道p。管道p需要服务B才能工作。到目前为止,我所做的是: 我的p管道定义 export class PPipe implements PipeTransform { constructor(private aService: AService) {} transform(value:number) : string { return number.toString(); } } 我如何在我的服务中使用它B @Injectable() export

在服务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);
  }
}
但我在生成时遇到一个错误:
应为1个参数,但得到0。

每次我想使用PPipe时,是否需要传递它的实例?如果是这样,如何从HTML模板中实现它


感谢您的帮助

您需要注入管道。 如果你自己用
new
创建一些东西,Angulars DI就没有办法进行交互

export class BService {
  constructor(private pPipe:PPipe) {}

这样,Angular将创建一个
PPipe
实例,并将依赖项传递给其构造函数。

另一个答案解释道,可以通过将管道公开为提供者(默认情况下它不是提供者)并将其作为任何其他服务注入来解决。这样,
a服务
将通过角式喷油器注入
p管道

手动使用管道
transform
的唯一正确情况是,管道是第三方的,并且包含仅在管道类中可用的有用代码(例如,角度内置管道)


如果管道是第一方,正确的处理方法是不要调用管道
transform
,而是直接在
BService
中使用
AService
。管道必须进行重构,使其尽可能纤细,而
AService
包含重用管道功能所需的所有代码。

构建成功,但随后我进入了JS控制台
没有PPipe提供程序
,我是否需要将sthg添加到我的
BService
?确保您的管道具有
@pipe({name:…})
装饰器,并且它列在模块
声明中:[…]
我将其添加到模块的
提供程序
数组中,并且它工作正常;)很高兴听到。