【问题标题】:Bootstrap navbar stays expanded on route changeBootstrap 导航栏在路线更改时保持扩展
【发布时间】:2016-05-13 05:40:36
【问题描述】:

我有一个使用 Iron-router 的 Meteor 项目。

在我的项目中,我有一个引导导航栏,不幸的是,每当我在导航栏展开时导航到一条路线(由于屏幕是最小宽度),当我转到一条新路线时,导航栏仍然处于展开状态。

有没有办法将导航栏设置为在更改路线时再次折叠,就像通常的页面刷新一样?

编辑:

导航栏模板:

<template name="navigation">
  <nav class="navbar navbar-default">
    <div class="container-fluid">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="{{pathFor route='home'}}"><span class="glyphicon glyphicon-home"></span>&nbsp;&nbsp;&nbsp;&nbsp;RNG Leaderboard</a>
        </div>

        <div class="navbar-collapse collapse" id="navbar-collapse" aria-expanded="false" style="height: 1px;">
            <ul class="nav navbar-nav">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="glyphicon glyphicon-phone"></span>&nbsp;&nbsp;&nbsp;&nbsp;Games <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li>
                            <a href="/headsortails">Heads or Tails</a>
                        </li>
                    </ul>
                </li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="glyphicon glyphicon-stats"></span>&nbsp;&nbsp;&nbsp;&nbsp;Leaderboards <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li>
                            <a href="/headsortailsleaderboard">Heads or Tails</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                {{#if currentUser}}
                    {{#if isInRole 'admin'}}
                        <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="glyphicon glyphicon-cog"></span>&nbsp;&nbsp;&nbsp;&nbsp;Maintenance <span class="caret"></span></a>
                            <ul class="dropdown-menu">
                                <li>
                                    <a href="/manageusers"><span class="glyphicon glyphicon-user"></span>&nbsp;&nbsp;&nbsp;&nbsp;Manage Users</a>
                                </li>
                            </ul>
                        </li>
                    {{/if}}
                    <li><a href="/@{{currentUser.username}}"><span class="glyphicon glyphicon-user"></span>&nbsp;&nbsp;&nbsp;&nbsp;{{currentUser.profile.firstName}}&nbsp;{{currentUser.profile.lastName}}</a></li>
                    <li><a id="logout" href="{{pathFor route='login'}}"><span class="glyphicon glyphicon-log-out"></span>&nbsp;&nbsp;&nbsp;&nbsp;Log out</a></li>
                {{else}}
                    <li><a href="{{pathFor route='login'}}"><span class="glyphicon glyphicon-log-in"></span>&nbsp;&nbsp;&nbsp;&nbsp;Log in</a></li>
                    <li><a href="{{pathFor route='signup'}}"><span class="glyphicon glyphicon-pencil"></span>&nbsp;&nbsp;&nbsp;&nbsp;Sign up</a></li>
                {{/if}}
            </ul>
        </div>
    </div>
  </nav>
</template>

路由器代码:

Router.configure({
  layoutTemplate: 'layout', // Defines the layout template
  loadingTemplate: 'loading', // Defines the loading template
  onAfterAction: function(){
    $('.nav-collapse').collapse('hide');
  }
});

Router.plugin('dataNotFound', {
  notFoundTemplate: 'dataNotFound'
});

Router.route('/', {
  name: 'home',
  template: 'home'
});

Router.route('/signup');
Router.route('/login');
Router.route('/recoverpassword');
Router.route('/resetpassword');

Router.route('/manageusers', {
  name: 'manageusers',
  controller: 'ManageUsersController',
});

ManageUsersController = RouteController.extend({
  template: 'manageusers',
  before: function() {
    if (!Roles.userIsInRole(Meteor.userId(), 'admin')) {
      this.redirect('home');
    } else {
      this.render('manageusers');
    }
  }
});

var usernameRoute = '/@:username';
Router.route(usernameRoute, {
  name: 'profile',
  controller: 'ProfileController'
});

ProfileController = RouteController.extend({
  template: 'profile',
  waitOn: function() {
    return Meteor.subscribe('userProfile', this.params.username);
  },
  data: function() {
    var username = Router.current().params.username;
    return Meteor.users.findOne({
      username: username
    });
  }
});

Router.route('/headsortails');
Router.route('/headsortailsleaderboard');

【问题讨论】:

    标签: twitter-bootstrap meteor navbar iron-router collapse


    【解决方案1】:

    一个不雅但实用的解决方案是检查导航栏是否已展开然后单击它 - 根据 Barry Doyle 的解决方案

      closeNavBar: function() {
        var isExpanded = $('.navbar-toggle').attr('aria-expanded') === true;
        if(isExpanded) {
          $('.navbar-toggle').click();
        }
        this.next();
      },
    

    【讨论】:

      【解决方案2】:

      根据 Michel 的回答和一些挖掘,我在我的 router.js 文件中提出了以下解决方案:

      Router.configure({
        onAfterAction: function(){
          $('.navbar-toggle').click();
        }
      });
      

      【讨论】:

      • 你确定这有效吗?当导航栏关闭并且我去新路线时,路线会自动打开,这很烦人。
      • 啊,没想到,在我的应用程序中,您只能通过导航栏转到新路线,因此您需要执行一些额外的代码来防止此功能在以下情况下运行您使用不同的方法前往新路线。
      【解决方案3】:

      Neigher 提供的两种解决方案都有效。

      必须是这样的。 attr() 返回字符串 'true''false' 不是布尔值,这就是为什么使用 === 'true'

      Router.configure({
          ...
          onAfterAction() {
              const navbarToggle = $('.navbar-toggle');
              if (navbarToggle.attr('aria-expanded') === 'true') {
                  navbarToggle.click();
              }
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        • 2021-11-12
        • 2021-10-27
        • 1970-01-01
        • 1970-01-01
        • 2013-09-18
        相关资源
        最近更新 更多