如何在子状态处于活动状态时使用ui-router设置活动类

时间:2016-03-22 09:52:02

标签: angularjs angular-ui-router children

我在侧边栏中有菜单中的一些项目。这是侧栏的代码

<div class="navbar-default sidebar" role="navigation">
<div class="sidebar-nav navbar-collapse">
    <ul class="nav in" id="side-menu">
        <li ui-sref-active="sideActive">
            <md-button class="md-raised md-warn md-hue-2" ui-sref="dashboard.home"><i class="fa fa-dashboard fa-fw"></i> Dashboard</md-button>
        </li>
       <li ui-sref-active="sideActive">
            <md-button class="md-raised md-warn md-hue-2" ui-sref="dashboard.userManagement"><i class="fa fa-user"></i>  User </md-button>
        </li>
        <li  ui-sref-active-eq="sideActive" >
            <md-button ng-click="check(4)"  class="md-raised md-warn md-hue-2" ui-sref="dashboard.orderManagement.manage"><i class="fa fa-file-text-o"></i>  Order Management<span class="fa arrow"></span></md-button>
            <ul class="orderNav nav nav-second-level" collapse="collapseVar!=4">
                <li ng-class="{orderActive: $state.includes('order_management')}">
                    <md-button width="2" ui-sref="dashboard.orderManagement.manage" class="md-raised md-warn md-hue-2">Manage Orders</md-button>
                </li>
                <li  ng-class="{orderActive: $state.includes('order_management')}">
                    <md-button width="2" ui-sref="dashboard.orderManagement.payment.transfers" class="md-raised md-warn md-hue-2">Payment</md-button>
                </li>

            </ul>
        </li>
        <li ui-sref-active="sideActive">
            <md-button class="md-raised md-warn md-hue-2" ui-sref="dashboard.artManagement"><i class="fa fa-picture-o"></i>  Art Management</md-button>
        </li>

    </ul>
</div>
<!-- /.sidebar-collapse -->

在上面的代码中,对于订单管理,存在子菜单项,并且在子菜单项中,对于子项之一,存在另外的子项(将在主视图而不是侧栏中显示)。 例如:1)订单管理 - > I)付款II)退款                                                 |                                         i)转移ii)收入 当视图处于收入或转移或付款时,订单管理应该是活动的。我正在获取这样的URL http://localhost:8080/admin/#/dashboard/order_management/payment/transfer以进行转移。但是对于那些按钮我无法设置活动类,当点击转移时 这是州代码之一。

.state('dashboard.orderManagement.manage', {
            templateUrl: 'submodules/order_management/manageOrder.html',
            url: '/manage_order',
            controller: 'orderCtrl',
            resolve: {
                loadMyFiles: function($ocLazyLoad) {
                    return $ocLazyLoad.load({
                        name: 'abcd',
                        files: [
                            'submodules/order_management/controller.js',
                            'scripts/services.js'
                        ]
                    })
                }
            }
        })

如何做到这一点,任何人都可以帮助我

2 个答案:

答案 0 :(得分:6)

您在列表的子元素的ng-class属性中给出了错误的状态。尝试使用以下代码。

<div class="navbar-default sidebar" role="navigation">
        <div class="sidebar-nav navbar-collapse">
            <ul class="nav in" id="side-menu">
                <li ui-sref-active="sideActive">
                    <md-button class="md-raised md-warn md-hue-2" ui-sref="dashboard.home"><i class="fa fa-dashboard fa-fw"></i> Dashboard</md-button>
                </li>
               <li ui-sref-active="sideActive">
                    <md-button class="md-raised md-warn md-hue-2" ui-sref="dashboard.userManagement"><i class="fa fa-user"></i>  User </md-button>
                </li>
                <li  ng-class="{orderActive: $state.includes('dashboard.orderManagement')}" >
                    <md-button ng-click="check(4)"  class="md-raised md-warn md-hue-2" ui-sref="dashboard.orderManagement.manage"><i class="fa fa-file-text-o"></i>  Order Management<span class="fa arrow"></span></md-button>
                    <ul class="orderNav nav nav-second-level" collapse="collapseVar!=4">
                        <li ui-sref-active="sideActive">
                            <md-button width="2" ui-sref="dashboard.orderManagement.manage" class="md-raised md-warn md-hue-2">Manage Orders</md-button>
                        </li>
                        <li  ui-sref-active="sideActive">
                            <md-button width="2" ui-sref="dashboard.orderManagement.payment.transfers" class="md-raised md-warn md-hue-2">Payment</md-button>
                        </li>
                        <li ui-sref-active="sideActive">
                            <md-button width="2" ui-sref="dashboard.orderManagement.pixum" class="md-raised md-warn md-hue-2">Pixum</md-button>
                        </li>
                    </ul>
                </li>
                <li ui-sref-active="sideActive">
                    <md-button class="md-raised md-warn md-hue-2" ui-sref="dashboard.artManagement"><i class="fa fa-picture-o"></i>  Art Management</md-button>
                </li>

            </ul>
        </div>

控制器代码:

 $stateProvider.state('dashboard.orderManagement', {
              url: '/order_management',
              abstract: true,
              template: '<div ui-view></div>'
            })
            .state('dashboard.orderManagement.manage', {
             templateUrl: 'submodules/order_management/manageOrder.html',
            url: '/manage_order',
            controller: 'orderCtrl',
            resolve: {
                loadMyFiles: function($ocLazyLoad) {
                    return $ocLazyLoad.load({
                        name: 'artifuAdmin',
                        files: [
                            'submodules/order_management/controller.js',
                            'scripts/services.js'
                        ]
                    })
                }
            }
            })
            .state('dashboard.orderManagement.pixum', {
               //content
            });

答案 1 :(得分:1)

使用过滤器添加类解决了我的问题。
   例如:<li ng-class="{sideActive: ('dashboard.orderManagement' | includedByState)}" >

<ul class="nav in" id="side-menu">
            <li ui-sref-active="sideActive">
                <md-button class="md-raised md-warn md-hue-2" ui-sref="dashboard.home"><i class="fa fa-dashboard fa-fw"></i> Dashboard</md-button>
            </li>
           <li ui-sref-active="sideActive">
                <md-button class="md-raised md-warn md-hue-2" ui-sref="dashboard.userManagement"><i class="fa fa-user"></i>  User Management</md-button>
            </li>
            <li ng-class="{sideActive: ('dashboard.orderManagement' | includedByState)}" >
                <md-button ng-click="check(4)"  class="md-raised md-warn md-hue-2" ui-sref="dashboard.orderManagement.manage"><i class="fa fa-file-text-o"></i>  Order Management<span class="fa arrow"></span></md-button>
                <ul class="orderNav nav nav-second-level" collapse="collapseVar!=4">
                    <li ui-sref-active="orderActive">
                        <md-button width="2" ui-sref="dashboard.orderManagement.manage" class="md-raised md-warn md-hue-2">Manage Orders</md-button>
                    </li>
                    <li ng-class="{orderActive: ('dashboard.orderManagement.payment' | includedByState)}">
                        <md-button width="2" ui-sref="dashboard.orderManagement.payment.transfers" class="md-raised md-warn md-hue-2">Payment</md-button>
                    </li>

                </ul>
            </li>
            <li ui-sref-active="sideActive">
                <md-button class="md-raised md-warn md-hue-2" ui-sref="dashboard.artManagement"><i class="fa fa-picture-o"></i>  Art Management</md-button>
            </li>

        </ul>