У меня есть одна и та же директива, используемая в двух разных местах в одном файле .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 внутри части контроллера в директиве.
Я новичок, я читал документы, и проверили примеры, но, очевидно, я что-то не хватает. Поэтому, пожалуйста, отсылайте меня к какому-нибудь руководству, вместо того, чтобы опросить мой вопрос. – Ned
Я только что узнал, что моя проблема вызвана $ timeout. Если я удалю его, все будет хорошо, а элементы получат опции в зависимости от директивы, в которой они были определены. Но мне нужно иметь этот тайм-аут, так что я ищу обходной путь. – Ned
Попробуйте переместить вызов '$ timeout' внутри функции' $ watch'. Вероятно, только * вокруг * вызов jquery. – Yoshi