Tôi có ứng dụng Angular 2 sử dụng các thành phần PrimeNG.Góc: trường tự động hoàn tất thay đổi tiêu điểm sau khi xóa một mục
Giao diện có phần autocomplete với đa chọn (p-autoComplete
) tương tự như một trong các từ the documentation:
<p-autoComplete [(ngModel)]="countries"
[suggestions]="filteredCountriesMultiple"
(completeMethod)="filterCountryMultiple($event)"
[minLength]="1"
placeholder="Countries"
field="name"
[multiple]="true">
</p-autoComplete>
Sự khác biệt duy nhất là trong trường hợp của tôi lĩnh vực đầu vào đã cố định kích thước và thanh cuộn.
Vấn đề:
Mỗi lần khi tôi loại bỏ một phần tử từ giữa của danh sách autocomplete nó di chuyển tập trung vào dưới cùng của lĩnh vực đầu vào. Nó trông giống như thế này:
nó là rất khó chịu cho người dùng, đặc biệt là khi có một số lĩnh vực mà cần được loại bỏ.
Câu hỏi: Làm cách nào để buộc cuộn ở trên cùng một vị trí sau khi xóa phần tử?
Làm thế nào để tái sản xuất:
Để cụ thể hơn, bạn có thể tạo lại vấn đề bằng cách thêm css tiếp theo
max-width: 150px;
max-height: 100px;
overflow-y: auto;
trực tiếp trên lớp documentation page vào ui-autocomplete-multiple-container.ui-inputtext
css sử dụng trình duyệt console.
UPDATE: tôi quản lý để có được vị trí cuộn bằng cách thiết lập onUnselect
phương pháp trong các thành phần sử dụng mã như thế này:
onUnselect(event: any) {
document.querySelector("div.my-input-class").scrollTop
}
UPDATE 2: Tôi quản lý để làm cho nó hoạt
Giải pháp là sự kết hợp của các trình xử lý sự kiện onUnselect
và onFocus
.
Trước tiên. Tôi lưu vị trí cuộn cuối cùng vào một trường trong cuộc gọi onUnselect
.
Thứ hai. Tôi đặt giá trị này thành phần tử được chỉ định trong khi gọi onFocus
.
Mã tương ứng trông như thế này:
scrollPosition: number = 0;
onUnselect(event: any) {
let input = document.querySelector("div.my-input-class");
this.scrollPosition = input.scrollTop;
}
onFocus(event: any) {
let input = document.querySelector("div.my-input-class");
input.scrollTop = this.scrollPosition;
}
Nó hoạt động tốt và có lẽ đây sẽ là giải pháp cuối cùng.
Tuy nhiên tôi không thích. Sẽ tốt hơn nếu các chàng trai của PrimeNG nhúng một chức năng hữu ích vào trong thành phần của họ. Đối với tôi, nó lạ ở sao nó không ra khỏi hộp.
Nếu bạn tìm thấy giải pháp tốt hơn, vui lòng đề xuất.
bạn có thể tạo một plunker để tái tạo? – Aravind
Dường như con trỏ đang gây ra hành vi nhảy. Vì vậy, tôi khuyên bạn nên cố gắng vô hiệu hóa con trỏ khi một mục bị xóa (có thể bằng cách vô hiệu hóa phần tử) hoặc thử chuyển tiêu điểm sang một phần tử khác trước khi xóa mục đó. Tôi không biết nếu điều khiển bạn đang sử dụng sẽ cho phép bạn làm điều đó nhưng tôi không thể kiểm tra nó cho đến khi tôi nhận được quyền truy cập vào máy tính – Sal
Ngoài ra, đây là một trong những câu hỏi có cấu trúc tốt nhất mà tôi đã thấy. Thật dễ dàng để xem/hiểu vấn đề của bạn. Cảm ơn bạn đã dành thời gian và công sức cho nó! – Sal