Я разрабатываю небольшое решение, используя AngularJS (я новичок в нем), и я пытаюсь создать эффект аккордеона , используя теги <dl> <dt> <dd>
. Я определил ng-repeat
, чтобы создать как dt, так и dd внутри dl из файла .json, и он работает хорошо.Угловые JS-директивы с ng-repeat, не прошедшие петлю через дочерние элементы
Моя проблема возникает, когда я хочу добавить некоторые функции с помощью директивы, поэтому я могу показать/скрыть элемент <dd>
, нажав на элемент <dt>
. Код моей директивы, похоже, не работает, так как он действительно не делает то, что я ожидаю, - он ничего не делает. Может быть Директива пытается добавить функциональность до того, как ng-repeat
завершил процесс? но для этого я добавил переменную $ timeout.
весь раствор: http://codepen.io/valecarlos/pen/PNdpeZ
код Директива:
app.directive('accordion', function($timeout){
return{
restrict: 'E',
transclude: true,
replace: true,
scope: {},
template: '<dl ng-transclude></dl>',
link: function(scope,element){
$timeout(function() {
console.log(element)
console.log(element.children().length);//this gives me 0
console.log("im here" + element)
element.children().find('dd').css('display','none');
element.find('dt').on('click', function(event){
element.children().find("dd").css('display', 'none')
var ddToOpen = angular.element(event.target).next();
ddToOpen.css('display','block');
});
});
}
};
});
HTML:
<accordion>
<dt ng-repeat-start="article in articles">
//my content
</dt>
<dd ng-repeat-end="">
//my content
</dd>
<accordion>
примечание: я пытался реализовать эту гармошку, используя как JQuery и AngularJS, но ничего произойдет, когда я нажму dt
Спасибо noppa! Теперь я понимаю, где я терпеть неудачу, я пытался реализовать то, что вы предложили, но я не смог заставить его работать и проверять ваш код, скрывает ли он 'dd', когда он загружается? это не работает для меня. ура! – randomguy04
Вы правы, была отдельная проблема с селекторами. Я обновил ответ и ручку, и теперь он должен работать. – noppa