angular - 如何限制 NgSelect 下拉面板中显示的项目数?

标签 angular typescript dropdown angular-ngselect

所以我使用 Angular ngselect 来显示一个下拉列表,其中包含一堆选项。由于屏幕的限制,我想将下拉列表中显示的项目数限制为 3,用户可以滚动浏览剩余的项目。

我在响应式(Reactive)表单中使用 ng-select 并且 [![看起来像这样][1]][1]

当我点击付款方式时,布局似乎很好,因为它只包含 2 个项目。 [![在此处输入图片描述][2]][2]

但是当点击另一个下拉菜单时,它会被切断,因为下拉菜单的大小不适合容器

[![在此处输入图片描述][3]][3]

我尝试的另一种方法是通过编写 appendTo="body"

将这个 ng select 下拉列表附加到 body

当下拉菜单弹出时,它看起来像这样 [![在此处输入图片描述][4]][4]

但这种方法的主要问题是,当我滚动浏览父级(在本例中为正文)时,下拉菜单会停留在它起源的同一位置,而理想的行为应该是它应该随着ngselect 元素。

[![在此处输入图片描述][5]][5]

如何限制显示的元素数量以使其适合容器。 [1]: /image/HdfAb.png [2]: /image/WRvk7.png [3]:/image/P1W2w.png [4]:/image/5augz.png [5]:/image/8Nitf.png

最佳答案

看这里 issue on github

在这里 bottom one example

还有这里 version with checkbox

这是一个只有 4 个项目可见的基本示例。如您所见,因此在 *ngFor 指令中使用了 slice:0:4。此外,还会检查是否在范围内选择了超过 4 个带有“更多...” 文本的项目。

<ng-select
    [items]="days"
    [multiple]="true"
    bindLabel="name"
    bindValue="order"
    placeholder="Select days"
    [(ngModel)]="selectedDays">
    <ng-template ng-multi-label-tmp let-items="items" let-clear="clear">
        <div class="ng-value" *ngFor="let item of items | slice:0:4">
            <span class="ng-value-label">{{item.name}}</span>
            <span class="ng-value-icon right" (click)="clear(item)" aria-hidden="true">×</span>
        </div>
        <div class="ng-value" *ngIf="items.length > 4">
            <span class="ng-value-label">{{items.length - 4}} more...</span>
        </div>
    </ng-template>
</ng-select>

然后在组件中

export class MultiSelectCustomExampleComponent implements OnInit {

    daysOfWeek: DayOfWeek[] = [];
    selectedDays: DayOfWeek[] = [];

    constructor() {
    }

    ngOnInit() {
        this.daysOfWeek = [
            new DayOfWeek("Monday", 1),
            new DayOfWeek("Tuesday", 2),
            new DayOfWeek("Wednesday", 3),
            new DayOfWeek("Thursday", 4),
            new DayOfWeek("Friday", 5),
            new DayOfWeek("Saturday", 6),
            new DayOfWeek("Sunday", 7),
        ];
    }
}

还有列表的一些模型

export class DayOfWeek {

    name: string;
    order: number;
    
    constructor(name: string, order: number) {
        this.name = name;
        this.order = order;
    }
}

关于angular - 如何限制 NgSelect 下拉面板中显示的项目数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64465865/

相关文章:

angular - 实现 OnInit 类的目的是什么,删除 ngOnInit 可以正常工作?

javascript - 有没有一种方法可以独立处理为多个可观察对象发出的值,然后在所有可观察对象完成后做一些事情?

angular - 将 '[object Object]' 转换为日期 Angular 4

javascript - 链接状态列表 将 HTML 下拉到特定页面

html - "onDropDownClose"事件一直被触发,即使我点击 ng-multiselect-dropdown 中下拉菜单以外的任何其他地方

javascript - e.target 和 htmlelement 不能进行比较是有原因的吗?

node.js - Node - 设置 angular-cli 环境

angular - 如何订阅 formGroup 更改并计算其他两个属性之一?

typescript - 相当于 Typescript 声明文件中的 module.exports

angular - 将管道添加到 Angular2 中的 formControlName