如何使指令和组件在全球范围内可用

hY8vVpf3tyR57Xib

我编写了一个自定义指令,在Angular 2应用程序中使用它关闭了Angular 2应用程序所有不同组件的内容面板(模板中的某些内容所有者)。由于每个组件的代码完全相同,因此我认为编写一条可以定义一次并在所有组件中使用的指令是有意义的。这是我的指令的样子:

import { Directive, ElementRef, HostListener, Injectable } from '@angular/core';

@Directive({
    selector: '[myCloseContentPanel]'
})

export class CloseContentPanelDirective {
    private el: HTMLElement;

    constructor(el: ElementRef) {
        this.el = el.nativeElement;
    }

    @HostListener('click') onMouseClick() {
        this.el.style.display = 'none';
    }
}

现在,我希望可以一​​次在app.component父组件中导入此指令,然后可以在所有子组件中使用此指令。遗憾的是,这行不通,因此我必须在每个组件中分别导入此指令。难道我做错了什么?还是这种行为根本不可能?

贡特·佐赫鲍尔(GünterZöchbauer)

更新> = RC.5

您必须在要使用组件,指令或导入模块的管道的任何模块中导入模块。没有其他办法了。

你可以做的是建立一个模块,出口其他几个模块(例如,BrowserModule该出口CommonModule

@NgModule({
  declarations: [CoolComponent, CoolDirective, CoolPipe],
  imports: [MySharedModule1, MySharedModule2],
  exports: [MySharedModule1, MySharedModule2, CoolComponent, CoolDirective, CoolPipe],
})
export class AllInOneModule {}

@NgModule({
  imports: [AllInOneModule]
})
class MyModule {}

这样,您就可以将导出的所有内容AllInOneModule提供给MyModule

另请参阅https://angular.io/docs/ts/latest/guide/ngmodule.html

更新<= RC.5

bootstrap(AppComponent, [provide(PLATFORM_DIRECTIVES, {useValue: [CloseContentPanelDirective], multi: true})]);

请参阅下面的注释-尽管providers应该优先使用根组件中的每个样式指南,但boostrap()这样做不起作用:

原版的

在根组件上添加

@Component({
  selector: 'my-app',
  providers: [provide(PLATFORM_DIRECTIVES, {useValue: [CloseContentPanelDirective], multi: true})],
  templat: `...`
})
export component AppComponent {
}

@Component()@Directive()@Pipe()已包括@Injectable()也无需在此添加它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

$(this)如何在全球范围内可用

来自分类Dev

如何使AngularJS内置服务在全球范围内可用?

来自分类Dev

如何使Aurelia中的lodash之类的图书馆在全球范围内可用?

来自分类Dev

使扩展方法/属性在全球范围内可用

来自分类Dev

Angular服务在全球范围内可用吗?

来自分类Dev

使扩展方法/属性在全球范围内可用

来自分类Dev

全球范围内的职能

来自分类Dev

我如何在全球范围内构建微服务和 API?

来自分类Dev

Clojure:如何在全球范围内启用规范断言?

来自分类Dev

如何在全球范围内通过npm安装?

来自分类Dev

我应该在哪里放置类型/接口以使其在全球范围内可用?

来自分类Dev

node.js-使结果在全球范围内可用(请求模块)

来自分类Dev

在全球范围内致电角度服务

来自分类Dev

全球范围内的JavaScript语句

来自分类Dev

在全球范围内举行PSSession

来自分类Dev

这种关闭是否在全球范围内?

来自分类Dev

如何将ng-repeat项目对象访问到指令范围和子范围内?

来自分类Dev

Ember:全球可用的搜索组件(和操作)?

来自分类Dev

在没有滑轨的情况下运行滑轨模型/使记录器在全球范围内可用

来自分类Dev

为什么此自定义采购功能无法使我声明的变量在全球范围内可用?

来自分类Dev

jQuery $如何初始化?如何在全球范围内使用?

来自分类Dev

如何使用代理在全球范围内为本地网站提供服务?

来自分类Dev

如何在全球范围内安装Dart软件包?

来自分类Dev

如何在2020年全球范围内将Scss文件添加到Vue项目

来自分类Dev

如何在全球范围内注销chartjs-plugin-labels?

来自分类Dev

如何在全球范围内添加“ @ testing-library / jest-dom”?

来自分类Dev

如何在全球范围内隐藏Quassel IRC中的联接/零件/退出?

来自分类Dev

如何在全球范围内更改* nix邮件中的发件人地址?

来自分类Dev

phaser.io如何在全球范围内使用国家独立资产

Related 相关文章

  1. 1

    $(this)如何在全球范围内可用

  2. 2

    如何使AngularJS内置服务在全球范围内可用?

  3. 3

    如何使Aurelia中的lodash之类的图书馆在全球范围内可用?

  4. 4

    使扩展方法/属性在全球范围内可用

  5. 5

    Angular服务在全球范围内可用吗?

  6. 6

    使扩展方法/属性在全球范围内可用

  7. 7

    全球范围内的职能

  8. 8

    我如何在全球范围内构建微服务和 API?

  9. 9

    Clojure:如何在全球范围内启用规范断言?

  10. 10

    如何在全球范围内通过npm安装?

  11. 11

    我应该在哪里放置类型/接口以使其在全球范围内可用?

  12. 12

    node.js-使结果在全球范围内可用(请求模块)

  13. 13

    在全球范围内致电角度服务

  14. 14

    全球范围内的JavaScript语句

  15. 15

    在全球范围内举行PSSession

  16. 16

    这种关闭是否在全球范围内?

  17. 17

    如何将ng-repeat项目对象访问到指令范围和子范围内?

  18. 18

    Ember:全球可用的搜索组件(和操作)?

  19. 19

    在没有滑轨的情况下运行滑轨模型/使记录器在全球范围内可用

  20. 20

    为什么此自定义采购功能无法使我声明的变量在全球范围内可用?

  21. 21

    jQuery $如何初始化?如何在全球范围内使用?

  22. 22

    如何使用代理在全球范围内为本地网站提供服务?

  23. 23

    如何在全球范围内安装Dart软件包?

  24. 24

    如何在2020年全球范围内将Scss文件添加到Vue项目

  25. 25

    如何在全球范围内注销chartjs-plugin-labels?

  26. 26

    如何在全球范围内添加“ @ testing-library / jest-dom”?

  27. 27

    如何在全球范围内隐藏Quassel IRC中的联接/零件/退出?

  28. 28

    如何在全球范围内更改* nix邮件中的发件人地址?

  29. 29

    phaser.io如何在全球范围内使用国家独立资产

热门标签

归档