Material CDK Overlay flexibleConnectedTo 不接受 Angular 组件作为源
Material CDK Overlay flexibleConnectedTo doesn't accept Angular component as origin
我有一个 Angular 组件,它实际上是引擎盖下的一个按钮 :
<app-button (click)="showText(thebutton)" #thebutton>
<button type="button" class=""><span>Popover</span></button>
</app-button>
showText() 方法调用 PopoverService.open() 方法,该方法应在按钮旁边显示弹出窗口(工具提示)。
问题是,弹出框出现在浏览器的左上角 window 而不是元素旁边。
<div id="cdk-overlay-0" class="cdk-overlay-pane" style="pointer-events: auto;">
<app-popover>
<div class="popover"></div>
</app-popover>
</div>
app-button 有 "display: inline-block; position: relative;" 风格,就像一个普通的 html 按钮。
当我将代码更改为普通 HTML 按钮时,它按预期工作:
<button (click)="showText(thebutton)" #thebutton>Popover</button>
and Material CDK 添加了 "top" and "left" 样式,如下所示:
<div id="cdk-overlay-2" class="cdk-overlay-pane" style="pointer-events: auto; top: 87px; left: 389.656px;">
<app-popover>
<div class="popover"></div>
</app-popover>
</div>
具有 "display: inline-block" 风格的简单 div 也可以。
为什么 Angular 组件(样式 "display: inline-block; position: relative;")不能工作,我怎样才能让它工作?
通过向组件添加“.elementRef”解决了这个问题:
<app-button (click)="showText(thebutton.elementRef)" #thebutton>
<button type="button" class=""><span>Popover</span></button>
</app-button>
来自Angular MaterialCDK源代码here
/** Possible values that can be set as the origin of a FlexibleConnectedPositionStrategy. */
export type FlexibleConnectedPositionStrategyOrigin = ElementRef | HTMLElement | Point & {
width?: number;
height?: number;
};
所以传递给AngularCDK Overlay服务的参数'origin'必须是"ElementRef | HTMLElement"类型(或Point,即{readonly x: number; readonly y: number ; }).
我把这个留在这里,希望这对以后的人有帮助。
我有一个 Angular 组件,它实际上是引擎盖下的一个按钮 :
<app-button (click)="showText(thebutton)" #thebutton>
<button type="button" class=""><span>Popover</span></button>
</app-button>
showText() 方法调用 PopoverService.open() 方法,该方法应在按钮旁边显示弹出窗口(工具提示)。
问题是,弹出框出现在浏览器的左上角 window 而不是元素旁边。
<div id="cdk-overlay-0" class="cdk-overlay-pane" style="pointer-events: auto;">
<app-popover>
<div class="popover"></div>
</app-popover>
</div>
app-button 有 "display: inline-block; position: relative;" 风格,就像一个普通的 html 按钮。
当我将代码更改为普通 HTML 按钮时,它按预期工作:
<button (click)="showText(thebutton)" #thebutton>Popover</button>
and Material CDK 添加了 "top" and "left" 样式,如下所示:
<div id="cdk-overlay-2" class="cdk-overlay-pane" style="pointer-events: auto; top: 87px; left: 389.656px;">
<app-popover>
<div class="popover"></div>
</app-popover>
</div>
具有 "display: inline-block" 风格的简单 div 也可以。
为什么 Angular 组件(样式 "display: inline-block; position: relative;")不能工作,我怎样才能让它工作?
通过向组件添加“.elementRef”解决了这个问题:
<app-button (click)="showText(thebutton.elementRef)" #thebutton>
<button type="button" class=""><span>Popover</span></button>
</app-button>
来自Angular MaterialCDK源代码here
/** Possible values that can be set as the origin of a FlexibleConnectedPositionStrategy. */
export type FlexibleConnectedPositionStrategyOrigin = ElementRef | HTMLElement | Point & {
width?: number;
height?: number;
};
所以传递给AngularCDK Overlay服务的参数'origin'必须是"ElementRef | HTMLElement"类型(或Point,即{readonly x: number; readonly y: number ; }).
我把这个留在这里,希望这对以后的人有帮助。