2016-01-25 2 views
0

Я пытаюсь использовать scrollspy из Materialize (http://materializecss.com/scrollspy.html) для таргетинга каждого div, созданного с помощью ng-repeat.Scrollspy для материализации не прокручивается вообще с помощью Angularjs

Однако мне кажется, что класс scrollspy ничего не делает. Вместо прокрутки к этой части страницы DOM просто перезагружается и указывает на часть страницы.

Другая проблема заключается в том, что использование href="/#community#sharingLove" меняет URL-адрес веб-сайта. В любом случае, чтобы scrollspy работала без добавления URL-адреса?

<div class="full-height row" ng-controller="CommunityController"> 
    <div class="col l10 main-content"> 
     <div ng-repeat="principle in acmPrinciples" id ="{{principle.id}}" class="row full-width centering-text section scrollspy"> 
      <div class ="col-md-12"> 
       <h4>{{principle.title}}<h4> 
      </div> 
      <div class ="col-md-12 comm-description-container"> 
       <p class="paragraph-style larger-font-size"> 
        {{principle.description}} 
       </p> 
      </div> 
      <div class ="col-md-12"> 
       <video class="responsive-video comm-video-height" controls> 
        <source ng-src="{{principle.videoURL}}" type="video/mp4"> 
       </video> 
      </div> 
     </div> 
    </div> 

    <div class="col l2 scroll-content"> 
     <div class="row"> 
      <div class="col hide-on-small-only m3 l2 scroll-items"> 
       <ul class="section table-of-contents"> 
        <li><a href="#/community#experiencingGod">Experiencing God</a></li> 
        <li><a href="#/community#sharingLove">Sharing Love</a></li> 
        <li><a href="#/community#conntectingLives">Connecting Lives</a></li> 
        <li><a href="#/community#declaringTruth">Declaring Truth</a></li> 
       </ul> 
      </div> 
     </div> 
    </div> 
</div> 

У меня есть связанные jQuery, bootstrap и материализация. Последняя вещь: другие функции материализуют работу для меня, просто не scrollspy. Я также делаю

$(document).ready(function(){ 
    $('.scrollspy').scrollSpy(); 
}); 
+0

добавить пример в https://jsfiddle.net/ – vorant

ответ

1

Я думаю, что если вы удалите #/сообщество из hrefs, он должен работать. Href должен содержать идентификатор блока, а не дополнительную информацию о URL-адресе. Например, попробуйте использовать

<a href="#experiencingGod">Experiencing God</a> 
+0

Эй Иаков спасибо за ответы. Ты прав. Однако проблема связана с контроллером AngularJS. Материализуйте, что выполнение начинается с использования document.ready. Однако, когда я делаю это в своем контроллере, он не работает. Я также пытался использовать $ document.ready.function() {}, указанный в https://docs.angularjs.org/api/ng/service/$document, но не повезло. Если открыть консоль разработчика на странице html и введите $ ('. Scrollspy'). ScrollSpy(); оно работает. Я думаю, что угловой выполняет функцию раньше, причина в том, что, если я положу следующий код внутри setTimeout даже на 100 мс, он работает. – theCodingLaw

+0

Я вижу. Если контроллер генерирует страницу или вставлен с помощью ng-include, то да, document.ready не подходит. Вам нужно будет выяснить, где именно нужно позвонить $ ('. Scrollspy'). ScrollSpy(); является. Он может быть помещен в контроллер, хотя угловые пуристы избегают наличия кода, который касается DOM, в контроллере. Хорошим подходом является создание директивы, которая вызывает scrollSpy(), когда представление инициализируется. –