2013-09-12 5 views
-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);  
} 

И, похоже, моя директива всегда использует только варианты, которые я прохожу от второго элемента. Я не могу заставить его работать с параметрами сначала, или со второго элемента, в зависимости от того, какой из них перетаскивается.

У кого-нибудь есть идея, почему это происходит? Может быть, мне нужно определить разницу в определении директивы или что-то в этом роде? Я пробовал много вещей, но не повезло.

Спасибо.

UPDATE:

Если я удалю $ смотреть и $ таймаут, параметры, передаваемые с директивой работают нормально, но JQuery вызов, который я использую не работает нормально. Я поместил плагин jquery внутри части контроллера в директиве.

+0

Я новичок, я читал документы, и проверили примеры, но, очевидно, я что-то не хватает. Поэтому, пожалуйста, отсылайте меня к какому-нибудь руководству, вместо того, чтобы опросить мой вопрос. – Ned

+0

Я только что узнал, что моя проблема вызвана $ timeout. Если я удалю его, все будет хорошо, а элементы получат опции в зависимости от директивы, в которой они были определены. Но мне нужно иметь этот тайм-аут, так что я ищу обходной путь. – Ned

+0

Попробуйте переместить вызов '$ timeout' внутри функции' $ watch'. Вероятно, только * вокруг * вызов jquery. – Yoshi

ответ

0

Ваш плагин jquery, вероятно, делает что-то вне знания углов. Вам нужно будет сделать $ apply(), чтобы угловые знания могли обновляться.

Чтобы прочитать о том, как $ применять() метод работает, вы можете найти его в документации: http://docs.angularjs.org/api/ng.$rootScope.Scope#$apply

+0

Я попробую, если это поможет! Спасибо Мэтью! – Ned

Смежные вопросы