AngularJS-Dragula 嵌套列表
AngularJS-Dragula nested lists
TL;DR;
我需要拖入嵌套列表,但无法正常工作。我在 Plunkr 编译了一个简单的例子。
我有没有定义深度的动态嵌套集,我只需要能够在它们自己的 parent-container 内对它们进行排序。但是由于 parent 也被拖来拖去,所以每当你拿起一个 child 时,整棵树都会被拖来拖去。
function ListItemController($scope, dragulaService) {
var self = this;
this.$onInit = function() {
dragulaService.options( $scope, this.item.id, {
removeOnSpill: false,
moves: function (el, source, handle, sibling) {
console.info(el, target, source, sibling);
return el.id === self.item.id; // elements are always draggable by default
},
accepts: function (el, target, source, sibling) {
console.info(el, target, source, sibling);
return true; // elements can be dropped in any of the `containers` by default
},
invalid: function (el, handle) {
return el.id !== self.item.id; // don't prevent any drags from initiating by default
},
});
if (this.item.children && this.item.children.length > 0) {
$scope.$on(this.item.id + '.drag', function() {
console.info(this.item.id + '.drag', arguments);
});
}
};
}
documentation 提到使用 moves
函数创建句柄,这可能会帮助我,但我从来没有从该函数或 accepts
功能。
我试过使用 $postLink
和 $scope.$$dragula
上的观察者来确保启动它,甚至是 dragulaService.find($scope, self.item.id)
上的观察者。 None 有效...
问题在于库查找包名的方式。这使用 $scope.$eval
。意思是它试图执行我给它的名字。
<span id="{{$ctrl.item.id}}">{{ $ctrl.item.text }}</span>
<ol dragula="{{$ctrl.item.id}}">
<list-item ng-repeat="child in $ctrl.item.children" item="child"></list-item>
</ol>
意味着这不起作用,它启动了名为 0
、-1
、 等的列表...
<span id="{{$ctrl.item.id}}">{{ $ctrl.item.text }}</span>
<ol dragula="'{{$ctrl.item.id}}'">
<list-item ng-repeat="child in $ctrl.item.children" item="child"></list-item>
</ol>
但是通过在语句周围添加单引号,$scope.$eval 将其视为一个字符串,从而使整个过程按预期工作。
有关完整代码,请查看:https://plnkr.co/edit/6h1HUb98wwspJ1KggISh?p=preview
TL;DR;
我需要拖入嵌套列表,但无法正常工作。我在 Plunkr 编译了一个简单的例子。
我有没有定义深度的动态嵌套集,我只需要能够在它们自己的 parent-container 内对它们进行排序。但是由于 parent 也被拖来拖去,所以每当你拿起一个 child 时,整棵树都会被拖来拖去。
function ListItemController($scope, dragulaService) {
var self = this;
this.$onInit = function() {
dragulaService.options( $scope, this.item.id, {
removeOnSpill: false,
moves: function (el, source, handle, sibling) {
console.info(el, target, source, sibling);
return el.id === self.item.id; // elements are always draggable by default
},
accepts: function (el, target, source, sibling) {
console.info(el, target, source, sibling);
return true; // elements can be dropped in any of the `containers` by default
},
invalid: function (el, handle) {
return el.id !== self.item.id; // don't prevent any drags from initiating by default
},
});
if (this.item.children && this.item.children.length > 0) {
$scope.$on(this.item.id + '.drag', function() {
console.info(this.item.id + '.drag', arguments);
});
}
};
}
documentation 提到使用 moves
函数创建句柄,这可能会帮助我,但我从来没有从该函数或 accepts
功能。
我试过使用 $postLink
和 $scope.$$dragula
上的观察者来确保启动它,甚至是 dragulaService.find($scope, self.item.id)
上的观察者。 None 有效...
问题在于库查找包名的方式。这使用 $scope.$eval
。意思是它试图执行我给它的名字。
<span id="{{$ctrl.item.id}}">{{ $ctrl.item.text }}</span>
<ol dragula="{{$ctrl.item.id}}">
<list-item ng-repeat="child in $ctrl.item.children" item="child"></list-item>
</ol>
意味着这不起作用,它启动了名为 0
、-1
、 等的列表...
<span id="{{$ctrl.item.id}}">{{ $ctrl.item.text }}</span>
<ol dragula="'{{$ctrl.item.id}}'">
<list-item ng-repeat="child in $ctrl.item.children" item="child"></list-item>
</ol>
但是通过在语句周围添加单引号,$scope.$eval 将其视为一个字符串,从而使整个过程按预期工作。
有关完整代码,请查看:https://plnkr.co/edit/6h1HUb98wwspJ1KggISh?p=preview