В каком модуле я должен объявить угловую директиву? - PullRequest
0 голосов
/ 25 августа 2018

У меня есть директива:

@Directive({
    selector: '[ICheck]',
})
export class ICheckDirective {

    @Input()
    ICheck: string;

    constructor(element: ElementRef) {
        var $element: any = $(element.nativeElement);

        $element.iCheck({
            checkboxClass: 'icheckbox_md',
            radioClass: 'iradio_md',
            increaseArea: '20%'
        })
    }

}

Где я заявляю это в app.module

@NgModule({
    declarations: [
        ...
        ICheckDirective,
    ],
    imports: [
        ...
    ],
    providers: [
        ...
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }

Я получил ошибку в моем компоненте RoleListComponent в roles.module

@NgModule({
    imports: [
        RoleListComponent,
        ...
    ],
    declarations: [
        ...
    ]
})
export class RolesModule { }

Ошибка, которую я получил

ОШИБКА Ошибка: Uncaught (в обещании): Ошибка: Ошибки синтаксического анализа шаблона: Невозможно связать с 'ICheck', так как это не известное свойство 'input'. (» ] [ICheck] />

мой маршрут:

const routes: Routes = [
    {
        path: '',
        children: [
            {
                path: '',
                component: DashboardComponent
            },
            {
                path: 'users',
                loadChildren: './user/user.module#UserModule'
            },
            {
                path: 'roles',
                loadChildren: './roles/roles.module#RolesModule'
            },
            {
                path: 'portalpageowners',
                loadChildren: './portalpageowner/portalpageowner.module#PortalPageOwnerModule'
            }
        ]
    }
];

@NgModule({
    imports: [RouterModule.forChild(routes)],
    exports: [RouterModule]
})
export class AdminRoutingModule { }

1 Ответ

0 голосов
/ 25 августа 2018

Вам необходимо добавить в объявления того модуля, в котором вы хотите его использовать.В вашем случае в RoleModule.Но если вам нужно добавить его в несколько модулей, вам нужно создать SharedModule, экспортировать из него эту директиву

@NgModule({
   declarations: [ ..., ICheckDirective, ... ],
   exports: [ ..., ICheckDirective, ... ]
})
export class SharedModule { }

и импортировать этот модуль в другие модули.

@NgModule({
   imports: [ ..., SharedModule, ... ]
})
export class RoleModule { }

...

@NgModule({
   imports: [ ..., SharedModule, ... ]
})
export class AnotherModule { }

export сделает директиву видимой для объявлений тех модулей, которые импортируют SharedModule.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...