Angular скрывает flexslider на корневом URL-адресе

Итак, я хочу ng-hide div, в котором есть flexslider на root. Проблема в том, что images не загружается после перехода на другой путь.

Мой index.html выглядит так:

<ul>
  <li><a href="#/">Root</a></li>           <!-- don't show slider -->
  <li><a href="#/first">First</a></li>     <!-- show slider -->
  <li><a href="#/second">Second</a></li>   <!-- show slider -->
</ul>

<div ng-controller="SliderController">
  <div ng-include="'slider.html'" ng-hide="currentPath === '/'"></div>
</div>

<div ng-view></div>

И app.js:

app.controller('SliderController', ['$scope', '$location', function($scope, $location){ 
    $scope.$on('$routeChangeStart', function(next, current) { 
        $scope.currentPath = $location.path();
    });
}]);

Планкер

Когда вы запускаете плункер, он показывает вам index.html- без flexslider, что хорошо:

Основной вид


И теперь, когда вы нажимаете на первую или вторую ссылку, представление шаблона изменяется и загружается шаблон first.html/second.html, а также должен отображаться flexslider, что не так. Но он показывает стили flexslider (обратите внимание на тень окна).

Первое представление

Но если вы оставите его в представлении first/second, а затем переключите вкладку и вернетесь (в браузере), он покажет изображения.

Может кто-нибудь объяснить, что здесь происходит?


person Vucko    schedule 16.12.2014    source источник
comment
Первоначальное предложение: всякий раз, когда вы собираетесь манипулировать DOM, используйте директиву. Таким образом, инициализация вашего flexslider должна быть в директиве.   -  person Michael Lynch    schedule 16.12.2014
comment
@MichaelLynch Я пробовал, но не помогло. Может быть, я делал что-то не так. Можете попробовать в плункере?   -  person Vucko    schedule 16.12.2014


Ответы (1)


Всякий раз, когда вы каким-либо образом манипулируете DOM, вы должны делать это с помощью директивы, а не внутри контроллера или чистого Javascript.

В частности, для этой проблемы (использование Angular с FlexSlider) я бы посоветовал взглянуть на директиву, которую кто-то сделал, чтобы они хорошо работали друг с другом.

https://github.com/thenikso/angular-flexslider

person Michael Lynch    schedule 16.12.2014
comment
Я согласен, что это решает проблему с изображением, но ползунок теперь не работает. Если вы видите на изображении, div.flex-viewport должно быть внутри div.flexslider, а не вне его. - person Vucko; 16.12.2014
comment
Я видел эту директиву. Буду использовать в крайнем случае. Я считаю, что решение моей проблемы простое, поэтому я еще не сдаюсь :) - person Vucko; 17.12.2014
comment
Что ж, из моего последнего ответа (используя директиву). Возможно, измените начальный параметр на то, что имеет эта директива (github.com/thenikso/angular-flexslider/blob/master/). Также не уверен, почему у них есть тайм-аут при запуске flexslider, но это может быть еще одна вещь, которую стоит попробовать. - person Michael Lynch; 17.12.2014