Tôi có hai danh sách kết nối có thể phân loại. Khi một trong các danh sách trống, tôi cần hiển thị thông báo; khi danh sách trống đó được di chuột trong khi kéo, tôi cần hiển thị mục tiêu thả theo kiểu và ẩn thông báo danh sách trống. Tôi đã có thể lập trình phần lớn mã này và here is a simplifed Codepen of it working.Làm thế nào tôi có thể làm cho nó như vậy chỉ là một trạng thái rỗng hoặc một trình giữ chỗ mục tiêu thả của chương trình ui-sortable?
Lỗi là khi bạn kéo từ danh sách được điền vào danh sách trống và sau đó lại xuất hiện, danh sách trống sẽ hiển thị cả trình giữ chỗ danh sách trống và thả theo kiểu Mục tiêu. Dưới đây là một ảnh chụp màn hình:
Gốc của vấn đề dường như là ở cách tôi tính toán nếu danh sách rỗng cho các chỉ thị sortableList:
scope.isEmpty = function() {
if (!scope.attachments) {
return true;
} else if (scope.dragDirection === 'drag-out' && !scope.hovered) {
return scope.attachments.length <= 1;
} else if (scope.hovered) {
return false;
} else {
return scope.attachments.length === 0;
}
};
Lưu ý rằng tôi đang theo dõi của nhà nước về phạm vi và sử dụng $ áp dụng để đảm bảo các bản cập nhật DOM như vậy:
function onDragStart() {
scope.$apply(function() {
scope.dragDirection = 'drag-out';
});
}
function onDragStop() {
scope.$apply(function() {
scope.dragDirection = '';
});
}
function onDragOver() {
scope.$apply(function() {
scope.hovered = true;
});
}
function onDragOut() {
scope.$apply(function() {
scope.hovered = false;
});
}
đây là html cho các chỉ thị mẫu:
<div class="drop-target" ui-sortable="sortOptions" ng-model="attachments">
<div ng-repeat="attachment in attachments" class="attachment-box">
<span class="fa fa-bars pull-left drag-handle"></span>
<div class="link-attachment">
<a href ng-href="{{ attachment.fileUrl }}" target="_blank" class="attachment-name">{{ attachment.name }}</a>
<div class="extra-info link-info">{{ attachment.fileType }}</div>
</div>
</div>
<attachment-empty-state ng-show="isEmpty()"></attachment-empty-state>
</div>
Danh sách phụ thuộc khá dài để codepen hoạt động, tôi đơn giản hóa mã từ mã sản xuất thực tế và loại bỏ các phụ thuộc sẽ làm cho mã tùy chỉnh khá đáng kể. Dưới đây là danh sách các phụ thuộc nếu bạn muốn thử chạy nó: jquery, jquery-ui, angular, bootstrap, lodash và có thể sắp xếp từ angular-ui. Có một số font-awesome trong đó là tốt.
Bạn muốn điều gì xảy ra khi bạn kéo mục cuối cùng từ vùng chứa? – goldylucks
Gần với cách nó hiện đang hoạt động trong codepen - nhưng có mục thuốc cuối cùng đang hiển thị hành vi tương tự như thuốc đầu tiên. Nó hiển thị cả "thông báo danh sách trống" và trình giữ chỗ. Nó sẽ hiển thị trình giữ chỗ kéo cho đến khi trình trợ giúp kéo hoàn toàn tắt khỏi danh sách và sau đó nó sẽ chuyển sang "thông báo danh sách trống". – nephiw