Расширение директив в Angular 4

Я пытаюсь расширить NgbPopover, чтобы отправить пользовательское действие при вызове методов всплывающего окна open или close.

У меня настроено следующее:

custom-popover.directive.ts

@Directive({  
    selector:'[customPopover]',
    exportAs:'customPopover'
}) 
export class CustomPopover extends NgbPopover {}

some-list.component.ts

<input #quantityInput
       (input)="onInputChange()"
       type="number"

       popoverTitle="Warning!"
       [customPopover]="validationError"
       #validationPopovers="customPopover">

<ng-template #validationError>{{ message }}</ng-template>

Я ожидаю, что это будет вести себя как исходный NgbPopover (что позволит мне переопределить методы open и close, если я того пожелаю), но вместо этого я получаю следующую ошибку:

Can't bind to 'customPopover' since it isn't a known property of 'input'.

РЕДАКТИРОВАТЬ (чтобы показать объявления/импорт в модулях):

custom-popover.module.ts

@NgModule({
    declarations: [
        CustomPopover
    ],
    imports: [
        NgbModule
    ],
    exports:[CustomPopover]
})
export class CustomPopoverModule { }

app.module.ts

@NgModule({
    imports: [
       ...
       CustomPopoverModule
    ],
    ...
})

some-list.module.ts

@NgModule({
    imports: [
        ...
        NgbModule,
        CustomPopoverModule
    ],
    ...
})

person skepticscript    schedule 30.10.2017    source источник
comment
Вероятно, вы не добавили его в declarations: [...] и exports: [...] модуля или не импортировали модуль, в котором вы его используете.   -  person Günter Zöchbauer    schedule 30.10.2017
comment
Отредактировано для отображения деклараций и экспорта. Я признаю, что некоторое время боролся с ними, прежде чем получил последнюю ошибку (по-видимому) из шаблона. Но эти ошибки обычно жаловались на то, что [customPopover] не экспортируется.   -  person skepticscript    schedule 30.10.2017
comment
До сих пор не могу найти ошибку. Можете ли вы попытаться воспроизвести на stackblitz.com?   -  person Günter Zöchbauer    schedule 30.10.2017


Ответы (1)


Хорошо, я нашел проблему. В дополнение к предоставлению свойств selector и exportAs также необходимо добавить строку Input(), которая соответствует селектору, чтобы применить [customPopover] к элементу, поэтому директива становится:

@Directive({  
    selector:'[customPopover]',
    exportAs:'customPopover'
}) 
export class CustomPopover extends NgbPopover {
    @Input()
    customPopover: string;
}
person skepticscript    schedule 01.11.2017
comment
последовал этому примеру, но не смог добиться успеха. У вас есть плункер или что-то с рабочим решением? - person Micko; 03.04.2020
comment
не беспокойтесь, у меня есть решение! Все равно спасибо за ответ ???? - person Micko; 04.04.2020
comment
@Micko, не могли бы вы поделиться своим решением, плз - person azerafati; 07.04.2020
comment
@azerafati вот ссылка на мой вопрос, а также есть принятый ответ, который я опубликовал :) Дайте мне знать, если у вас есть вопросы. stackoverflow .com/questions/61010439/ - person Micko; 07.04.2020