【发布时间】:2020-08-16 23:12:41
【问题描述】:
我发布这个问题只是为了自己回答,以防有人像我一样挣扎!
我正在开发一个 Angular 项目来实现类似 Trello 的应用程序。我希望能够将一个元素从一个列表拖到另一个列表中,所以我安装了 Angular cdk 模块并关注their guide。
注意:我的应用程序分为几个页面/组件,我正在实现该接口 (Trello) 的页面称为 BoardPageComponent。
首先我添加了cdkDrag 指令,元素变得可拖动,这是一个好的开始!
然后我将cdkDropList 指令添加到父元素中,子元素仍然可以拖动,但它们的样式在拖动时不再起作用!
解决方案
在cdkDropList 内拖动元素时,DragAndDropModule 会创建该元素的克隆,但位于文档的正文级别。因此,如果您的组件被封装,那么它的样式将不适用!
解决方案 1: 一种快速的解决方案是移动该可拖动元素的样式并将其放入全局样式文件中。
解决方案 2: 另一种解决方案是使用 ViewEncaplusation.None 禁用该组件的封装:
@Component({
selector: 'app-board-page',
templateUrl: './board-page.component.html',
styleUrls: ['./board-page.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class BoardPageComponent implements OnInit, OnDestroy {
....
}
这会起作用,但您应该注意,这可能会将某些样式泄漏到应用程序的其他组件中。所以一定要手动封装组件的样式。
或者也许还有其他方法??
【问题讨论】:
标签: javascript css angular angular-cdk angular-cdk-drag-drop