【发布时间】:2020-10-14 16:04:20
【问题描述】:
我有多个组件,它们共享共同的逻辑。我想将该逻辑移动到单个文件中,因此我不必将代码复制到每个组件中。我虽然关于使用指令。 这是正确的方法吗?
该逻辑用于构建拖放样式图。 (处理定位等...)
所以我还需要监听 (onmousedown) 和 (onmouseup) 事件,然后调用相应的处理程序,这些处理程序也位于指令中。
所以组件的模板应该是这样的:
<div class="entity-wrapper" (mousedown)="onMouseDown($event)" (mouseup)="onMouseUp($event)">
<span>{{entityData.name}}</span>
</div>
其中onMouseDown() 和onMouseUp() 将是指令中的方法。
指令看起来像这样:
@Directive({
selector: '[appDiagramElement]'
})
export class DiagramElementDirective {
@Input() position: Vector2;
constructor(private _elRef: ElementRef) { }
onMouseDown($e: MouseEvent){
...
}
onMouseUp($e: MouseEvent){
...
}
@HostListener('document:mousemove', ['$event'])
onMouseMove($e: MouseEvent){
...
}
}
当我尝试这样做时。它不起作用,因为该组件没有方法onMouseDown() 和onMouseUp()。所以我想,我可能想在组件本身中创建这些方法,然后在指令的方法中调用正确的实现。
我该怎么做或者有更好的方法?
编辑:添加模板代码,我在其中实例化组件:
<div #wrapper class="diagram-wrapper">
<app-entity [entityData]="testEntity" class="diagram-element" appDiagramElement [position]="testEntity"></app-entity>
</div>
【问题讨论】:
标签: angular dry angular-directive angular-components