2016-12-25 4 views
0

Я добавил AngularJS к существующему веб-приложению, и Scrollpy перестала работать. Ниже приведен код после включения контроллеров AngularJS.Bootstrap Scrollpy не работает после добавления AngularJS

<div class="container bs-docs-container"> 
    <div class="row"> 

     <div class="col-md-3" ng-controller="MenuController"> 

      <div class="bs-sidebar hidden-print affix-top" role="complementary"> 
       <ul class="nav bs-sidenav quickMenu"> 
       <h3 class="quickMenuHead">Quick Menu</h3> 
       <hr></hr>       
        <li ng-repeat="item in menu" class=""> 
         <a href="#{{item.mainType}}">{{item.mainName}}</a> 
         <ul class="nav"> 
          <li ng-repeat="sub in item.submenu" class=""> 
           <a href="#{{item.mainType}}-{{sub.subType}}">{{sub.subName}}</a> 
          </li> 
         </ul> 
        </li> 
       </ul>     

      </div> 
     </div> 

И Scrollpy был включен с помощью JS:

$body.scrollspy({ 
    target: '.bs-sidebar', 
    offset: 40 
}) 

$window.on('load', function() { 
    $body.scrollspy('refresh') 
}) 

Любые комментарии, почему это не удается?

+0

Это может иметь что-то делать ж/то, что вы сейчас генерирующую часть страницы динамически (в нг-повтор, в частности). Когда запускается код начальной загрузки, Angular может не закончить показ страницы, а элементы, которые ищет JavaScript-бутстрап, еще не существуют. Проверьте этот вопрос, вы также можете найти примеры людей, создающих свои собственные ... http://stackoverflow.com/q/14284263/398606 –

+0

любых ошибок в консоли? – Aravind

+0

@ Aravind, да, вы были правы :) –

ответ

0

Вы просто попробуете это.

app.directive('scrollSpy', function(){ 
    return { 
    restrict: 'A', 
    link: function(scope, elem, attr) { 
     elem.scrollSpy({ /* set up options here */ }); 

     //watch whatever expression was passed to the 
     //scroll-spy attribute, and refresh scroll spy when it changes. 
     scope.$watch(attr.scrollSpy, function(value) { 
       elem.scrollSpy('refresh'); 
     }); 
    } 
    }; 
}); 

Тогда в HTML:

<div scroll-spy="foo">Do something with: {{foo}}</div> 
+0

Мне нужно будет вручную обновить scrollspy, когда содержимое будет добавлено или удалено динамически. Я только что добавил функцию обновления scrollspy через полсекунды, и это сработало. –