У меня есть два связанных ui-сортируемых списка. Когда один из списков пуст, мне нужно показать сообщение; когда этот пустой список зависает во время перетаскивания, мне нужно показать стилизованную цель выделения и скрыть сообщение пустого списка. Я смог запрограммировать подавляющее большинство этого кода и здесь упрощенный файл Codepen.
Ошибка заключается в том, что при перетаскивании из заполненного списка по пустым списку, а затем снова в пустом списке отображается как пустой список-заполнитель, так и стилизованный целевой объект. Вот скриншот:
Корень проблемы, похоже, находится в пути, я вычисляю, если список пуст для директивы 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;
}
};
Обратите внимание, что я отслеживаю состояние области и использую $apply для обеспечения обновлений DOM:
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;
});
}
Вот шаблон html для директив:
<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>
Список зависимостей довольно длинный для работы кодекса, я упростил код из фактического производственного кода и избавил от зависимостей, сделав собственный код весьма существенным. Ниже приведен список зависимостей, если вы хотите попытаться запустить его самостоятельно: jquery, jquery-ui, angular, bootstrap, lodash и сортировать из angular -ui. Там есть и некоторые шрифты.