谁能帮我。我坚持以下问题。我有一个正常的页面,其中导航栏激活了scrollspy。一切都很好,但是我为导航栏创建了custom directive,并且当使用此新的自定义指令加载导航栏时,ScrollSpy和平滑滚动不起作用!!!

index.html:

<body ng-app="myApp" id="myPage" data-spy="scroll" data-target=".myScroll" data-offset="60">

    <navigation-bar></navigation-bar>

</body>


Navigation-bar.html

<nav class="navbar navbar-default navbar-fixed-top myScroll" >
    <div class="container">
        <div class="navbar-header">
            <a class="navbar-brand" href="index.html#myPage">My Logo</a>
        </div>
        <div class="collapse navbar-collapse" id="myNavbar">
            <ul class="nav navbar-nav navbar-right">
                <li><a href="index.html#services">Services</a></li>
                <li><a href="index.html#about">About</a></li>
                <li><a href="index.html#contact">Contact</a></li>
                <li><a href="signup.html">Sign-up</a></li>
            </ul>
        </div>
    </div>
</nav>


自定义指令

var app = angular.module("myApp", []);
app.directive("navigationBar", function(){
    return {
        restrict: 'E',
        templateUrl: 'navigation-bar.html'
    };
});


JS文件可平滑滚动

$(document).ready(function(){
    $(".navbar a").on('click', function(event) {
        if (this.hash !== "") {
            event.preventDefault();
            var hash = this.hash;
            $('html, body').animate({
                scrollTop: $(hash).offset().top
            }, 1000, function(){
                window.location.hash = hash;
            });
        }
});

最佳答案

我觉得有必要补充一点,这是一种向Angular应用程序添加scrollspy支持的方法,但是按照所有最佳做法正确地进行操作可能无法解决。

问题是,当scrollspy插件初始化时,页面尚不包含导航栏。尝试从主体中删除data-scrollspy,并将scrollspy初始化添加到指令的链接函数中

var app = angular.module("myApp", []);
app.directive("navigationBar", function(){
    return {
        restrict: 'E',
        templateUrl: 'navigation-bar.html',
        link: function() {
          $('body').scrollspy({ target: '.myScroll', offset: 60 });
          $(".navbar a").on('click', function(event) {
            if (this.hash !== "") {
              event.preventDefault();
              var hash = this.hash;
              $('html, body').animate({
                  scrollTop: $(hash).offset().top
              }, 1000, function(){
                  window.location.hash = hash;
              });
            }
          });
        }
    };
});


编辑:即使单击动画http://plnkr.co/edit/2877Zf?p=preview,此插件也有效

请注意,如果在运行时添加了新链接,则onclick事件将对它们不起作用,为此,您必须使用事件委托:

$("body").on('click', ".navbar a" ,function(event) {
  if (this.hash !== "") {
    event.preventDefault();
    var hash = this.hash;
    $('html, body').animate({
        scrollTop: $(hash).offset().top
    }, 1000, function(){
        window.location.hash = hash;
    });
  }
});

关于javascript - 引导滚动和 Angular 自定义指令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41102122/

10-12 01:32