-1

我在一个 .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 插件。

4

1 回答 1

0

您的 jquery 插件可能正在做一些超出角度知识的事情。您必须执行 $apply() 才能让 Angular 知道要更新。

要了解 $apply() 方法的工作原理,您可以在文档中找到它:http ://docs.angularjs.org/api/ng.$ro​​otScope.Scope#$apply

于 2013-09-13T20:30:32.667 回答