我在一个 .html 文件中的两个不同位置使用了相同的指令。我希望能够将这两个指令与不同的选项一起使用。下面是应该使这个要求更清楚的代码:
<ul multisortable="{ stop: 'updateFirstColumn', receive: 'receiveFirstColumn' }"
class='connected'>
<li ng-repeat='task in tasks.firstcolumn> {{task.title}} </li>
</ul>
<ul multisortable="{ stop: 'updateSecondColumn', receive: 'receiveSecondColumn' }"
class='connected'>
<li ng-repeat='task in tasks.secondcolumn> {{task.title}} </li>
</ul>
我想创建指令,它能够识别,如果它是由第一列中的元素调用的,它应该使用为该元素定义的选项。所以我应该能够区分它,并获取 updateFirstColumn 或 updateSecondColumn,例如,这取决于它是通过从第一列还是第二列移动项目来调用的。
在我的指令中,在链接函数中,我做了这样的事情:
link: function postLink(scope, iElement, iAttrs) {
$timeout(function (){
$scope.$watch('tasks', function(newValue, oldValue) {
if (newValue){
angular.element($element).multisortable({
selectedClass: 'ui-selected',
connectWith: '.product-backlog-column'
})
}
}, true);
}, 0);
}
看起来我的指令总是只使用我从第二个元素传递的选项。我无法让它与第一个或第二个元素的选项一起使用,具体取决于拖动哪个元素。
有谁知道,为什么会这样?也许我应该在指令定义中定义单独的范围,或者类似的东西?我尝试了很多东西,但没有运气。
谢谢。
更新:
如果我删除 $watch 和 $timeout,使用指令传递的选项可以正常工作,但我正在使用的 jQuery 调用不能正常工作。我在指令的控制器部分中放置了 jquery 插件。