0

Я хотел бы добавить элемент <hr> между каждым клоном моей функции трансключения, за исключением последнего клонирования.Добавить элемент DOM при переадресации, за исключением последнего одного дочернего

Директива parent имеет собственный шаблон HTML.
В этом шаблоне я вызываю директиву атрибута, чтобы перекрыть элементы.

Пример:

function directiveTransclude() { 
    return { 
     link: function (scope, element, attr, ctrl, transclude) { 
      transclude(function (clone, scope) { 
       element.append(clone); 
      }); 
     } 
    }; 
} 

Эта директива поможет мне вручную обрабатывать transclude.
Мне просто нужно выяснить, как условно добавить <hr>.
Я предполагаю, что мне нужно добавить, например, element.append('<hr>'); после первого добавления.

Итак, как я могу узнать, сколько элементов переключить нужно добавить?
Есть ли последнее значение или что-то сказать мне, что это последний цикл?

Спасибо за помощь!

ответ

0

Только в случае, если вам интересно:

Это поздно, но я просто найти решение, используя альтернативный (с CSS).

Как уже упоминалось, @Aaron Pool, я могу использовать селектор last-child для достижения этого.

селектор last-of-type является привередливы, и селектор last-child фактически применяется к ребенку

Это лучше (быстрее, чем DOM инъекции и безопаснее визуально говоря, потому что <hr> может легко получить под редакцией правил CSS) ,

Я уже пробовал, что, тем не менее, он не работал должным образом.
Несмотря сегодня я выясняю, что мой МЕНЬШЕ код был таков:

&:last-child 

Вместо

:last-child 

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

0

Контроллер был создан на момент запуска функции ссылки, поэтому я бы просто отслеживал его в атрибуте контроллера.

В нижеследующем примере я предполагаю, что вы передаете эту директиву коллекцию для перебора или, по крайней мере, подсчета количества элементов, которые вы хотите. Я также предполагаю, что аргумент имеет имя collection и что вы используете bindToController, чтобы эта привязка директивы была доступна на контроллере к этому моменту. Наконец, я предполагаю, что вы также привязали атрибут к вашему контроллеру с именем iterationCount.

function directiveTransclude() { 
    return { 
     link: function (scope, element, attr, ctrl, transclude) { 
      ctrl.iterationCount++; 
      transclude(function (clone, scope) { 
       element.append(clone); 
       if(ctrl.iterationCount < (ctrl.collection.length - 1)) { 
        element.append('hr'); 
       } 
      }); 
     } 
    }; 
} 

Хотя, мое предложение было бы сделать это с помощью CSS, если <hr> не какая-то странное требование. Использование границы и селектор last-child было бы намного проще.

+0

Спасибо, я попробую это завтра. Кстати, я пробовал CSS-способ, вызывая селекторные ролики, такие как: last-child на родительском или прямо: last-of-type на ребенке, тем не менее этот способ не работает (дети - это директивы со своим собственным шаблоном, поэтому несколько DOM уровни здесь). – C0ZEN

+0

селектор 'last-of-type' является финишным, а селектор' last-child' фактически применяется к дочернему. Это означает «Если я последний ребенок». Я тоже смутился этим довольно долго. –

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

  • Нет связанных вопросов^_^