【发布时间】:2021-09-06 13:54:09
【问题描述】:
我想使用切换(显示/隐藏)另一个组件的自定义指令以角度创建一个组件。我的指令是 [appDatepicker],我想将此指令放入任何输入,然后在单击输入时自动显示 datepicker 组件。所以我创建了一个可以像下面这样导出的指令、组件和模块。
datepicker.directive.ts
import { Directive, ElementRef, HostListener, Inject } from '@angular/core';
import { DatepickerComponent } from './datepicker.component';
@Directive({
selector: '[appDatepicker]',
})
export class DatepickerDirective {
constructor(private el: DatepickerComponent) {}
@HostListener('click', ['$event.target']) onClick(btn) {
this.el.togglePicker();
}
}
datepicker.component.ts
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'datepicker',
templateUrl: 'datepicker.component.html',
styleUrls: ['datepicker.component.scss']
})
export class DatepickerComponent implements OnInit {
isPickerOpen:boolean=false;
constructor() { }
ngOnInit() { }
public togglePicker(){
this.isPickerOpen = !this.isPickerOpen;
}
}
datepicker.component.html
<div class="datepicker-container">
<ng-content></ng-content>
<div class="datepicker" ></div>
<div class="date-picker-date" *ngIf="isPickerOpen">
this is the datepicker popup
</div>
</div>
datepicker.module.ts
import { NgModule } from '@angular/core';
import { DatepickerComponent } from './datepicker.component';
import { DatepickerDirective } from './datepicker.directive';
@NgModule({
declarations: [DatepickerDirective],
imports: [],
exports: [],
providers: [],
})
export class DatepickerModule {}
我在主应用程序中像这样使用指令
app.component.html
<input appDatepicker class="datepicker-input"/>
但问题是指令没有调用 this.el.togglePicker() 方法。 el 返回 ElementRef。但似乎它不访问 datepicker 组件方法。谁能帮助我如何从指令中调用方法 togglePicker()。
【问题讨论】: