18

我正在开发一个 Angular 应用程序。我需要为所有链接添加特殊行为。在 AngularJS 中只会写一个这样的指令:

angular.module('whatever.module', []).directive('href', function() {
    return {
        restrict: 'A',
        link: function($scope, $element, $attrs) {
            // do stuff
        }
    };
});

在 Angular 中,我可以编写如下指令:

@Directive({
    selector: '[href]',
})

export class MyHrefDirective {
    constructor() {
        // whatever
    }
}

但是我怎样才能告诉应用程序在全局范围内使用该指令呢?我有很多关于它们的链接的观点。我是否必须导入它并directives在每个组件的数组中指定它(这是很多)?

我尝试将它注入到bootstrap函数中,就像您应该使用服务一样在全局范围内拥有一个实例,但这没有用

4

1 回答 1

30

我的理解是,您必须在组件级别选择加入所有自定义指令。只有 PLATFORM_DIRECTIVES 被隐式包含(ngFor、ngIf 等)。

但是,您可以将自己的自定义指令注册为 PLATFORM_DIRECTIVE

import { provide, PLATFORM_DIRECTIVES } from '@angular/core';

bootstrap(RootCmp, [
  provide(PLATFORM_DIRECTIVES, {useValue: YourCustomDirective, multi: true}),
]);

这是一篇更多地讨论这个过程的文章:http: //blog.thoughtram.io/angular2/2015/11/23/multi-providers-in-angular-2.html

编辑:我现在认为这不是一个问题,因为组件是在模块级别声明的。这意味着更少的重复,因为您不再需要在单个组件级别声明子组件。

于 2015-12-21T10:11:55.137 回答