无法使用 Angular.js 激活菜单栏

Posted

技术标签:

【中文标题】无法使用 Angular.js 激活菜单栏【英文标题】:Could not active the menu bar using Angular.js 【发布时间】:2018-07-01 01:04:14 【问题描述】:

我遇到了一个问题。我无法使用 Angular.js 激活正确的菜单栏。我有一些菜单、子菜单和子子菜单,但根据要求我无法激活它们。我在下面解释我的代码。

route.js:

var Admin=angular.module('easyride',['ui.router','ui.bootstrap']);
Admin.run(function($rootScope, $state) 
    $rootScope.$state = $state;
);
Admin.config(function($stateProvider, $urlRouterProvider) 
    $urlRouterProvider.otherwise('/');
    $stateProvider
    .state('/',
        url: '/',
    templateUrl: 'login.html',
        controller: 'loginController'
    )
    .state('dashboard',
        url:'/dashboard',
        templateUrl:'dashboard.html',
        controller:'dashboardController'
    )
    .state('dashboard.settings',
        url:'/settings',
        templateUrl:'settings.html',
        controller:'settingsController'
    )
    .state('dashboard.settings.area',
        url:'/area',
        templateUrl:'area.html',
        controller:'areaController'
    )
    .state('dashboard.settings.area.manageState',
        url:'/manageState',
        templateUrl:'manageState.html',
        controller:'manageStateController'
    )
    .state('dashboard.settings.area.manageCity',
        url:'/manageCity',
        templateUrl:'manageCity.html',
        controller:'manageCityController'
    )
)

实际上,当用户默认进入内页时,Home 表将处于活动状态。当用户单击settings 菜单时,相应的子菜单Manage Areasub-sub-menu Manage State 选项卡保持活动状态。我在下面解释我的页面。

dashboard.html:

<div id="navbar" class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
              <!--<li ui-sref-active="active" ><a ui-sref="dashboard">Home</a></li>-->
              <li ui-sref-active="active"><a ui-sref="dashboard">Home</a></li>
              <li ng-class="'active open': $state.includes('dashboard.settings.area')"><a ui-sref="dashboard.settings.area.manageState">Settings</a></li>


            </ul>
          </div>

Here is my full plunkr working code。在这里,当用户单击 settings 菜单时,我需要相应的 sub-menu and sub-sub-menu 将保持活动状态,而其他将不活动,这在我的情况下不会发生。请帮忙。

【问题讨论】:

【参考方案1】:

以下面的示例为例,我如何激活子菜单及其菜单。我猜这可能会对你有所帮助。

根据我们从“$state”提供程序的应用程序控制器获得的“stateName”应用“活动”类,基于此,我正在使用 ng-class 指令来激活菜单及其子菜单。

<li uib-dropdown ng-class="'active':($root.stateName.indexOf('dashboard.settings')>=0)">
    <a href uib-dropdown-toggle>Settings <span class="caret"></span></a>
    <ul role="menu" uib-dropdown-menu >
        <li ng-class="'active':($root.stateName.indexOf('dashboard.settings.area.manageCity')>=0)">
           <a ui-sref="dashboard.settings.area.manageCity">Manage City</a>
        </li>
        <li ng-class="'active':($root.stateName.indexOf('dashboard.settings.area.manageState')>=0)">
            <a ui-sref="dashboard.settings.area.manageState">Manage State</a>
        </li>
        </ul>
</li> 

还有

在您的控制器文件中,请使用以下代码设置 stateName。

module.registerController('TopicController', function ($state, $rootScope) 
      $rootScope.stateName = $state.current.name;//This line in all routes controller.
);

这是一个 Plunkr 链接:编辑了您的代码。 https://plnkr.co/edit/bFhvod7zf8JgnEAuH6oo?p=preview

您已在仪表板页面本身中添加了导航,因此最好将导航与实际视图分开。 请检查上述 Plunkr。

【讨论】:

我需要在哪个文件中更改它。你能编辑这个 plunkr 吗? 请格式化您的代码。它不可读。我认为您删除了某些部分。 不,这不是我想要的。我有这样的结构Menu-&gt;sub-menu-&gt;sub-sub-menu 那么你必须先在你的问题中提到你想要的相同结构。 请检查 Plunkr 链接。

以上是关于无法使用 Angular.js 激活菜单栏的主要内容,如果未能解决你的问题,请参考以下文章

win11 alt+tab切换窗口后,默认激活了窗口的菜单栏,能否改成win10一样,默认激活窗口原来的控件?

无法使用系统菜单栏 Javafx

如何使用 jquery 激活侧边栏菜单?

使用 MenuBar 创建框架 - pack() 无法识别大小,菜单栏正在被截断

导航栏的菜单活动背景动态

无需激活全屏模式的 Kiosk 样式 - OS X