AngularJS:drag-n-drop指令不起作用
AngularJS : drag-n-drop directive not working
我正在使用以下库: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's 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's 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's 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's 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>
我在调试控制台中运行了您的代码,发现没有定义对splice的调用。经过进一步检查,我发现<ul dnd-list>
元素实际上是基于serversList对象,而不是您要迭代的实际列表。当我设置这个dnd列表时,我做了一些非常类似的事情。
serversList.servers数组实际上将是UL的基础,然后您的li将是该数组中的条目。这样,拼接功能实际上会有一些可以使用的东西。
这应该会让你开始。我马上就要去开发激光标签了,所以今晚我没有时间实现它;)。
到目前为止,我对这个插件非常满意,玩得开心!
相关文章:
- Angular指令在alertify setContent内容中不起作用
- AngularJS指令部分应用的函数don'不起作用
- Google Maps API OverlayView()在AngularJS指令中不起作用
- mouseover和mouseleave文本颜色更改在指令链接中不起作用
- 这段jquery代码在angular指令中不起作用
- Angular Filter在指令表达式中不起作用
- Angular UI Select2指令搜索功能不起作用
- 新的自定义角度指令不起作用
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- 滚动指令在Angular JS中不起作用
- 角度指令双向绑定不起作用
- Angular.JS自定义指令;不起作用
- 指令中选择输入的双向绑定不起作用
- ng中使用的指令包括dond'不起作用
- scope.$apply 是未定义的,在 scrolly 指令中不起作用
- AngularJS,自定义指令不起作用@ plnkr
- 指令的角度优先级不起作用
- Angular js指令使用控制器作为语法ng点击不起作用
- 指令链接中的绑定不起作用
- ng 路由不起作用指令