Tim*_*çek 5 typescript angular angular-cdk
由于某些条件,我试图找到一种如何通过使用 CDK 禁用删除的方法。如果我想删除的列表为空,则应禁用。我找不到在 .ts 文件中的方法中执行此操作的方法.有一些 HTML 指令,但对我没有用。
if(event.container.data.length==1){
event.previousContainer.disabled=true;
}
Run Code Online (Sandbox Code Playgroud)
我找到了用于拖动容器的 .disabled 方法,但它仅在我拖动时有效。我需要一个事件来放置。
https://stackblitz.com/edit/angular-ui7u9m?file=src/app/cdk-drag-drop-disabled-sorting-example.ts
在这个 stackblitz 示例中,有两个列表,例如,当 Avilable 列表为空(数组中没有元素)时,不应再向此列表中删除。你能帮我这样做吗?
您可以使用enterPredicate来自 CdkDropList( Docs )的 Angular Material
@Input('cdkDropListEnterPredicate')
输入谓词:(拖动:CdkDrag,放下:CdkDropList)=> 布尔值
用于确定是否允许将项目移动到放置容器中的函数。
例如:
html:
<div
cdkDropList
[cdkDropListData]="basket"
class="example-list"
(cdkDropListDropped)="drop($event)"
[cdkDropListEnterPredicate]="canDrop">
<div class="example-box" *ngFor="let item of basket" cdkDrag>{{item}}</div>
</div>
Run Code Online (Sandbox Code Playgroud)
成分:
canDrop() {
return this.basket && this.basket.length > 0;
}
Run Code Online (Sandbox Code Playgroud)
检查附加的Stackblitz。
编辑1:
另外,您也可以使用附带的列表,您也可以在其中删除:
canDrop(item: CdkDrag, list: CdkDropList) {
console.log(list.getSortedItems().length)
return list && list.getSortedItems().length && list.getSortedItems().length > 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑2:
您可以覆盖函数以传入参数:
...
[cdkDropListEnterPredicate]="dropListEnterPredicate(basket)">
...
Run Code Online (Sandbox Code Playgroud)
dropListEnterPredicate(list: []){
return function(drag: CdkDrag, drop: CdkDropList) {
return list.length > 0;
};
Run Code Online (Sandbox Code Playgroud)