Material CDK Overlay flexibleConnectedTo doesn't accept Angular component as origin
我有一个Angular组件,实际上是引擎盖下的一个按钮:
1 2 | <button type="button" class=""><span>Popover</span></button> </app-button> |
showText()方法调用PopoverService.open()方法,该方法应在按钮旁边显示一个弹出窗口(工具提示)。
问题是,弹出窗口显示在浏览器窗口的左上角,而不是在元素旁边。
1 | </app-popover> |
app按钮具有"显示:行内块;位置:相对;" 样式,就像普通的html按钮一样。
当我将代码更改为普通的HTML按钮时,它可以按预期工作:
1 | <button (click)="showText(thebutton)" #thebutton>Popover</button> |
Material CDK添加了"顶部"和"左侧"样式,如下所示:
1 | </app-popover> |
具有样式" display:inline-block"的简单div也可以工作。
为什么Angular组件(样式为"显示:行内块;位置:相对;")不起作用,如何使它起作用?
通过在组件中添加" .elementRef"来解决该问题:
1 2 | <button type="button" class=""><span>Popover</span></button> </app-button> |
从这里的Angular Material CDK源代码
1 2 3 4 5 | /** Possible values that can be set as the origin of a FlexibleConnectedPositionStrategy. */ export type FlexibleConnectedPositionStrategyOrigin = ElementRef | HTMLElement | Point & { width?: number; height?: number; }; |
因此,传递给Angular CDK Overlay服务的参数'origin'必须为" ElementRef | HTMLElement"类型(或Point,即{只读x:数字;只读y:数字;})。
我把这个留在这里,希望以后能对某人有所帮助。