У меня проблема, с которой я не могу обойтись.Angular ngRepeat - Обновление после изменения HTML
У меня есть простая установка углового повторения для вывода некоторых слайдов. Существуют различные наборы слайдов, которые можно изменить. Я использую плагин jQuery для слайдера, который отлично работает.
Проблема в том, что когда я запускаю плагин слайдера jQuery, он, конечно, меняет структуру html. Поэтому, когда я изменяю слайды в области контроллера, угловые не удаляют старые слайды.
У меня есть рабочий пример здесь:
http://jsfiddle.net/antony_publica/ccvjz4au/
Чтобы проверить, пролистывания слайдов, должно быть 1, 2 3, затем 4. Нажмите листинге 2. Теперь, когда вы прокручиваете вы видите слайды 1 до 8. Когда он должен иметь 5 по 8.
HTML
<div ng-controller="MyCtrl">
Listing Id: {{current_listing.id}}
<div class="image_slider col-md-9" ng-if="current_listing">
<div class="slide slick-slide" ng-repeat="slide in current_listing.slides" repeat-end="initSlider()" >
{{slide}}
</div>
</div>
<button ng-click="current_listing = listing">Listing 1</button>
<button ng-click="current_listing = listing2">Listing 2</button>
</div>
JS
var myApp = angular.module('myApp',[]);
myApp.directive("repeatEnd", function(){
return {
restrict: "A",
link: function (scope, element, attrs) {
if (scope.$last) {
setTimeout(function(){
scope.$eval(attrs.repeatEnd);
}, 50);
}
}
};
});
function MyCtrl($scope) {
$scope.listing = {
id: 1,
slides: ['Slide 1','Slide 2','Slide 3', 'Slide 4']
};
$scope.listing2 = {
id: 2,
slides: ['Slide 5','Slide 6','Slide 7', 'Slide 8']
};
$scope.current_listing =$scope.listing;
$scope.initSlider = function(){
if($('.image_slider').hasClass('slick-slider')){
$('.image_slider').slick('unslick');
}
$('.image_slider').slick();
}
}
Ах да, вот как мой фактический код контроллера настроен, я использовал пример с другой скрипки , Но на самом деле это не устраняет проблему. Пока вы меняете листинг, все еще остаются 8 слайдов. –
@AntonyThompson Я собрал решение, которое должно работать так, как вы этого хотите. Проверьте мою ссылку для предварительного просмотра. Я обновлю свой ответ, чтобы отобразить его в прямом эфире всего за минуту. –
Хорошее решение. Спасибо –