You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS中Bootstrap下拉子菜单无法显示的问题求助

解决Bootstrap下拉子菜单不显示的问题

我来帮你搞定这个下拉子菜单的问题,结合你的代码和Bootstrap的特性,这几个调整点应该能解决问题:

1. 修正子菜单的AngularJS循环结构

你现在把ng-repeat放在了<ul class="dropdown-menu">标签上,这会导致每一个游戏项都生成一个独立的下拉菜单容器,而不是在同一个子菜单里展示所有游戏。正确的做法是把ng-repeat移到<li>标签上:

<li class="dropdown-submenu">
  <a href="#" class="dropdown-toggle" data-toggle="dropdown"> Games</a>
  <ul class="dropdown-menu">
    <li class="dropdown-item" ng-repeat="game in games" ng-click="getGames()">
      {{game.name}}
    </li>
  </ul>
</li>

2. 处理Bootstrap的子菜单支持(关键)

从Bootstrap 3开始,框架已经不再默认提供下拉子菜单的样式和交互支持,所以你需要添加自定义CSS来让子菜单正常显示。如果希望通过hover触发子菜单,添加这段CSS:

.dropdown-submenu {
  position: relative;
}

.dropdown-submenu .dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: -6px;
  margin-left: -1px;
  border-radius: 0 6px 6px 6px;
  display: none;
}

.dropdown-submenu:hover .dropdown-menu {
  display: block;
}

如果需要点击触发子菜单(更适合移动端),除了上面的CSS,还要添加一段AngularJS的事件处理代码:

// 在你的AngularJS控制器里添加
$('.dropdown-submenu a.dropdown-toggle').on('click', function(e) {
  $(this).next('.dropdown-menu').toggle();
  e.stopPropagation(); // 阻止事件冒泡,避免父下拉菜单关闭
  e.preventDefault();
});

3. 确保数据加载时机正确

虽然你确认能获取到游戏数据,但还是要保证games数组在下拉菜单渲染时已经被填充。可以给子菜单的<ul>添加ng-if来避免空菜单或undefined的问题:

<ul class="dropdown-menu" ng-if="games && games.length > 0">
  <li class="dropdown-item" ng-repeat="game in games" ng-click="getGames()">
    {{game.name}}
  </li>
</ul>

同时在控制器里初始化$scope.games = [];,避免数据未加载时出现报错。

4. 优化Bootstrap类的使用

把pull-right替换成Bootstrap推荐的dropdown-menu-right类,让下拉菜单右对齐更规范:

<ul class="dropdown-menu dropdown-menu-right">

另外清理代码里多余的空格(比如class="dropdown "末尾的空格),虽然不影响功能,但能让代码更整洁。

内容的提问来源于stack exchange,提问作者swetha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:18:48