【问题标题】:AngularJS sidebar link to stay active when clickedAngularJS侧边栏链接在单击时保持活动状态
【发布时间】:2016-03-14 19:15:00
【问题描述】:

我正在根据这个创建一个侧边栏

http://plnkr.co/edit/xzcjStdvmkI2rpfMzLjI?p=preview从this tutorial找到

但是,一旦单击链接,我想保持选择处于活动状态。我试过添加数据切换,但这似乎适用于导航药丸而不是导航栏。我还发现了一个我尝试实现的 is-active-nav 指令:

angular.module('sidebarmodule')
    .directive('isActiveNav', ['$location', function ($location) {
    return {
        restrict: 'A',
        link: function (scope, element) {
            scope.location = $location;
            scope.$watch('location.path()', function (currentPath) {
                if ('/#' + currentPath === element[0].attributes['href'].nodeValue) {
                    element.parent().addClass('active');
                } else {
                    element.parent().removeClass('active');
                }
            });

        }
    };
}]);

我在侧边栏模板中这样调用:

<li> <a is-active-nav href="#">Link1</a> </li>

我尝试的另一种方法是在我的控制器中添加$scope.isActive = function (viewLocation) { return viewLocation === $location.path(); };,然后添加到模板中:&lt;li ng-class="{ active: isActive('/importinvoice')}"&gt;&lt;a href="#/firstlink"&gt;First Link&lt;/a&gt;&lt;/li&gt;

但是,在导航到该页面后,我所做的任何事情都不会使侧边栏元素保持突出显示。我试图避开 jQuery,因为我希望它只是一个 AngularJS 解决方案。

我尝试了stackoverflow answer 中的大多数解决方案,但无法让它们中的任何一个在 plunker 上工作。

【问题讨论】:

    标签: angularjs twitter-bootstrap twitter-bootstrap-3 plunker


    【解决方案1】:

    您可以在$scope 中创建tab 属性,为其分配标签标识符,然后使用ng-class="{'active': tab==='tab1'}"

    【讨论】:

    • 是的,我应该提到我也试过这个。我创建了 ng-class="{ active: isActive('/firstlink')}" 并创建了一个函数 $scope.isActive = function (viewLocation) { return viewLocation === $location.path(); };基于其他堆栈流答案。这不起作用。
    • 这里是你所建议的 stackoverflow 链接,对于那些正在寻找的人:stackoverflow.com/questions/12295983/… 我只是无法让它与 plunker 一起工作
    【解决方案2】:

    使用这个:

         <div class="sidebar" sidebar-directive="state" ng-init="item=-1">
            <a href="#" id="navigation-toggle" ng-click="toggleState()">Navigation</a>
            <ul class="navigation">
              <li class="navigation-items"> <a href="#" ng-click="item=0" ng-class="{'active':item==0}">Link1</a> 
              </li>
              <li class="navigation-items"> <a href="#"ng-click="item=1" ng-class="{'active':item==1}">Link2</a> 
              </li>
              <li class="navigation-items"> <a href="#" ng-click="item=2" ng-class="{'active':item==2}">Link3</a> 
              </li>
              <li class="navigation-items"> <a href="#" ng-click="item=3" ng-class="{'active':item==3}">Link4</a> 
              </li>
              <li class="navigation-items"> <a href="#" ng-click="item=4" ng-class="{'active':item==4}">Link4</a> 
              </li>
            </ul>
          </div>
    

    查看链接:http://plnkr.co/edit/xzcjStdvmkI2rpfMzLjI?p=preview

    【讨论】:

    • 我不认为你附加了正确的 Plunker,但我会尝试这个方法
    • 它在这个 plunker 中不起作用:plnkr.co/edit/bUWo4RgpxhHYvyTo4Wol?p=preview
    • 您还需要在 style.css 中添加 .active 类,例如: .active{ background-color : #222!important; }
    猜你喜欢
    • 2022-12-31
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多