AngularJS: директива drag-n-drop не работает

0

Я использую следующую библиотеку: https://github.com/marceljuenemann/angular-drag-and-drop-lists

Я пытаюсь перемещать (перетаскивая) элемент из одного списка в другой. отказ от ответственности: я новичок, поэтому любая помощь приветствуется, и я могу совершить очень наивную ошибку.

Вот мой код:

var app = angular.module("app", ['dndLists']);

app.controller( 'myCtrl', function ( $scope, $http, $log ) {
    $scope.lists = {serversList:[], selectedServersList:[]}
    $scope.lists.serversList =
    {
        label : "servers",
        allowedTypes : [
            'server'
        ],
        servers : [
            {
                name : "server1",
                type : "server"
            }, {
                name : "server2",
                type : "server"
            }, {
                name : "server",
                type : "server"
            }
        ]
    };
    $scope.lists.selectedServersList =
    {
        label : "selectedServers",
        allowedTypes : [
            'server'
        ],
        servers : []
    };

    // Model to JSON for demo purpose
    $scope.$watch('lists', function(lists) {
        $scope.modelAsJson = angular.toJson(lists, true);
    }, true);
};
/**
* For the correct positioning of the placeholder element, the dnd-list and
* it children must have position: relative
*/
.servers-container ul[dnd-list],
.servers-container ul[dnd-list] > li {
    position: relative;
}

/**
* The dnd-list should always have a min-height,
* otherwise you can't drop to it once it empty
*/
.servers-container ul[dnd-list] {
    min-height: 42px;
    padding-left: 0px;
}

/**
* The dndDraggingSource class will be applied to
* the source element of a drag operation. It makes
* sense to hide it to give the user the feeling
* that he actually moving it.
*/
.servers-container ul[dnd-list] .dndDraggingSource {
    display: none;
}

/**
* An element with .dndPlaceholder class will be
* added to the dnd-list while the user is dragging
* over it.
*/
.servers-container ul[dnd-list] .dndPlaceholder {
    display: block;
    background-color: #ddd;
    min-height: 42px;
}

/**
* The dnd-lists child elements currently MUST have
* position: relative. Otherwise we can not determine
* whether the mouse pointer is in the upper or lower
* half of the element we are dragging over. In other
* browsers we can use event.offsetY for this.
*/
.servers-container ul[dnd-list] li {
    background-color: #fff;
    border: 1px solid #ddd;
    border-top-right-radius: 4px;
    border-top-left-radius: 4px;
    display: block;
    padding: 10px 15px;
    margin-bottom: -1px;

    /* Disable text selection if item is not draggable */
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

/**
* Gender-specifc background
*/
.servers-container ul[dnd-list] li.background-man {
    background-color: #CAE0FC;
}

.servers-container ul[dnd-list] li.background-woman {
    background-color: #FFE2F5;
}

.servers-container ul[dnd-list] input.background-man {
    background-color: #D8E9FF;
    color: #2F4D99;
}

.servers-container ul[dnd-list] input.background-woman {
    background-color: #FFF0FA;
    color: #D84FA7;
}

/**
* Handle positioning
*/
.servers-container .handle {
    cursor: move;
    position: absolute;
    top: 14px;
}

.servers-container .name {
    margin-left: 20px;
}
<div ng-app='app'>
    <div class="row" ng-controller='myCtrl'>
        <div class="servers-container col-md-4">
            <ul dnd-list="lists.serversList"
                dnd-allowed-types="lists.serversList.allowedTypes">
                <li ng-repeat="server in lists.serversList.servers"
                    dnd-draggable="server"
                    dnd-type="server.type"
                    dnd-disable-if="server.type == 'unknown'"
                    dnd-moved="lists.serversList.servers.splice($index, 1)"
                    dnd-effect-allowed="move"
                    class="background-servers">
                    <div class="handle">:::</div>
                    <div class="name" dnd-nodrag>
                        <input type="text" ng-model="server.name" class="background-server form-control input-sm">
                    </div>
                </li>
                <li class="dndPlaceholder">Drop any <strong>server</strong> here</li>
            </ul>
        </div>

        <div class="servers-container col-md-4">
            <ul dnd-list="lists.selectedServersList"
                dnd-allowed-types="lists.selectedServersList.allowedTypes">
                <li ng-repeat="server in lists.selectedServersList.servers"
                    dnd-draggable="server"
                    dnd-type="server.type"
                    dnd-disable-if="server.type == 'unknown'"
                    dnd-moved="lists.selectedServersList.servers.splice($index, 1)"
                    dnd-effect-allowed="move"
                    class="background-servers">
                    <div class="handle">:::</div>
                    <div class="name" dnd-nodrag>
                        <input type="text" ng-model="server.name" class="background-server form-control input-sm">
                    </div>
                </li>
                <li class="dndPlaceholder">Drop any <strong>server</strong> here</li>
            </ul>
        </div>
    </div>
</div>
  • 0
    я могу перетащить элемент из одного div в другой, но элемент исчезает из первого div после удаления, но не появляется во втором div .... его не добавляют в другой список.
Теги:
drag-and-drop

1 ответ

1

Я запустил ваш код в консоли отладки и увидел, что вызов на сращивание не определен. При дальнейшей проверке я вижу, что ваш элемент <ul dnd-list> самом деле основан на объекте serversList, а не на фактическом списке вещей, которые вы пропустили бы. Я сделал что-то очень похожее, когда я настраивал этот список dnd.

Массив серверовList.servers на самом деле будет базой вашего UL, а затем ваши li будут элементами внутри этого массива. Таким образом, функция сращивания будет иметь что-то, к чему ее можно использовать.

Это должно заставить вас начать. Через секунду я учусь в лайнер-разработчик, поэтому у меня нет времени его реализовать сегодня вечером;).

Я до сих пор был доволен этим плагином, получайте удовольствие!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню