Angular Material CDK 库提供了包括覆盖在内的各种功能。我能找到的所有示例都显示了如何在叠加层之上显示新组件。我的目标有点不同。我想在叠加层顶部显示一个现有组件(屏幕上的几个组件之一)。
我想到的行为是,当用户在特定对象上进入某种编辑模式时,表示该对象的组件会在覆盖层之上“浮动”,直到编辑完成或取消。
有没有直接的方法可以做到这一点?该cdkConnectedOverlay
指令似乎很有用,但我不知道如何使其工作。
Angular Material CDK 库提供了包括覆盖在内的各种功能。我能找到的所有示例都显示了如何在叠加层之上显示新组件。我的目标有点不同。我想在叠加层顶部显示一个现有组件(屏幕上的几个组件之一)。
我想到的行为是,当用户在特定对象上进入某种编辑模式时,表示该对象的组件会在覆盖层之上“浮动”,直到编辑完成或取消。
有没有直接的方法可以做到这一点?该cdkConnectedOverlay
指令似乎很有用,但我不知道如何使其工作。
Angular CDK 为您提供了两种实现方式(指令和服务)。
使用该Overlay
服务,您将需要调用create
传递positionStrategy
道具的方法:
@Component({
....
})
class AppComponent {
@ViewChild('button') buttonRef: ElementREf;
...
ngOnInit() {
const overlayRef = overlay.create({
positionStrategy: getOverlayPosition(),
height: '400px',
width: '600px',
});
const userProfilePortal = new ComponentPortal(UserProfile);
overlayRef.attach(userProfilePortal);
}
getOverlayPosition(): PositionStrategy {
this.overlayPosition = this.overlay.position()
.connectedTo(
this.buttonRef,
{originX: 'start', originY: 'bottom'},
{overlayX: 'start', overlayY: 'top'}
)
return this.overlayPosition;
}
...
}
我做了一个例子来向你展示如何使用CDK覆盖服务和类。
如果您更喜欢指令方式,请查看这篇中篇文章并查看应用指令方式的示例: