Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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
Javascript 依赖注入组件_Javascript_Angular_Typescript_Angular8_Angular Dependency Injection - Fatal编程技术网

Javascript 依赖注入组件

Javascript 依赖注入组件,javascript,angular,typescript,angular8,angular-dependency-injection,Javascript,Angular,Typescript,Angular8,Angular Dependency Injection,是否可以以某种方式在Angular中注入依赖项组件?我希望能够做一些类似于您在服务方面可以做的事情,例如: my.module.ts: providers: [ { provide: MyService, useClass: CustomService } ] 我曾尝试在包装器组件中使用*ngIf=condition,但它随后会抱怨没有为我不希望使用的组件提供服务。当然,您可以为特定注入令牌提供任何值常量、函数和类。您可以找到一些示例,其中包含我们将要制作的

是否可以以某种方式在Angular中注入依赖项组件?我希望能够做一些类似于您在服务方面可以做的事情,例如:

my.module.ts:
providers: [
   {
      provide: MyService,
      useClass: CustomService
   }
]

我曾尝试在包装器组件中使用*ngIf=condition,但它随后会抱怨没有为我不希望使用的组件提供服务。

当然,您可以为特定注入令牌提供任何值常量、函数和类。您可以找到一些示例,其中包含我们将要制作的组件

您可以创建自己的注入令牌,并提供您想要的任何东西和组件

/* In tokens.ts */ 
const MY_TOKEN_NAME = new InjectionToken<MyAmazingComponent>('MY_TOKEN_NAME')

/* In module */    
providers: [
  { provide: MY_TOKEN_NAME, useClass: MyAmazingComponent }
]

如果组件和注入组件之间存在父子关系,则完全有可能。 如果你有这样的结构

@Component( {
    selector:"app-parent",
    template:" <app-child> </app-child>"
 } )
export class ParentComp { ...}
现在,当您请求子组件所在的父组件时,Angular DI将为您注入它


如果您希望注入组件而不是父子关系,例如,您希望将sidenav组件注入到sidenav之外的某个表组件中,这几乎是不可能实现的。不建议也这样做,但这是可能的。如果您想这样做,您可能应该创建共享服务,该服务将在这些组件之间共享状态。

谢谢您的帮助。它在html文件中是什么样子,我想在其中替换组件。是吗?哦,对不起,我误解了你的情况。您最好通过DI放弃访问父/子。最好的做法是使用输入/输出或存储在服务中的某些条件来组织此通信,访问的不是component.condition,而是service.condition对不起,我应该澄清一下,我希望将组件注入html,类似于使用ngIf的方式,但我不想为设置为*ngIf=false的组件提供服务
@Component( {
    selector:"app-parent",
    template:" <app-child> </app-child>"
 } )
export class ParentComp { ...}
@Component({
    selector:"app-child",
     template:"I am child"
 })
export class ChildComponent{
    constructor(private parentComp:ParentComponent){
}
}