Я использую angular 1.x
, и я создал пользовательскую директиву под названием слайдер в следующем коде.
Я пытаюсь transclude
содержимое директивы слайдера, чтобы изменить его внутри функции включения. Но проблема в том, что clone не дает коллекцию элементов .slide. Вместо этого он дает комментарий, относящийся к ng-repeat
. Я не могу получить скомпилированный вывод ng-repeat
, который должен быть набором .slide divs.
. Я хочу знать, как получить доступ к результату ng-repeat
внутри функции transclude
, чтобы я мог успешно вызвать scope.showCurrent.
Теперь происходит следующее: $('.slide')
вызов внутри scope.showCurrent()
не перехватывает .slide
div потому что на момент вызова нет .slide
элементов. Но если ng-repeat
предоставил свой скомпилированный html внутри функции transclude, $('.slide')
поймает div.
app.directive('slider', function ($compile) {
return {
restrict: 'EA',
priority: 1200,
scope: true,
controller: function ($scope) {
$scope.slider = { currentIndex: 0 };
},
transclude:'element',
link: function (scope, el, attrs, ctrl, transclude) {
scope.showCurrent = function (currentIndex) {
console.log('x')
$('.slide').hide();
$('.slide').eq(currentIndex).show();
}
scope.$watch('slider.currentIndex', function (val) {
console.log('tst');
scope.showCurrent(val);
});
transclude(scope, function (clone) {
el.after(clone);
scope.showCurrent(scope.slider.currentIndex);
})
},
}
});
Ниже приведено использование html этой директивы.
<slider>
<div ng-repeat="slide in slides" class="slide">
<div>Image {{img}}</div>
<img ng-src="img"/>
</div>
</slider>
Вот мой планк https://plnkr.co/edit/m7YJBNuDjeLPaKkUYK5S?p=preview
slides
. Если вы четко объясните, каково ваше первоначальное намерение, я смогу предоставить решение - person Max Koretskyi   schedule 09.10.2016ng-transclude
в шаблоне? - person Max Koretskyi   schedule 09.10.2016