панель навигации не отображается в браузере с использованием ng-bootstrap и angular 4

Я создаю свое первое приложение Angular 4, используя ng-bootstrap (Bootstrap 4 для Angular) — не используя обычный Boostrap

Веб-сайт ng-bootstrap (https://ng-bootstrap.github.io/#/components/accordion/api) не перечисляет компонент для панели навигации (как это было в Bootstrap 3 или обычном бутстрапе 4). Означает ли это, что мне нужно построить меню из выпадающих списков/кнопок? Или мне нужно смешать обычный Bootstrap 4 с ng-bootstrap?

Я попытался создать это меню в html, но оно не отображается в браузере (просто бренд "MyWebSiteName" и маленькая серая рамка на моем экране, без навигации)

<nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">MyWebSiteName</a>
    </div>
     <div class="collapse navbar-collapse" id="myNavbar">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Home</a></li>
        <li class="dropdown">
          <a class="dropdown-toggle" data-toggle="dropdown" href="#">Page 1 <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Page 1-1</a></li>
            <li><a href="#">Page 1-2</a></li>
            <li><a href="#">Page 1-3</a></li>
          </ul>
        </li>
        <li><a href="#">Page 2</a></li>
        <li><a href="#">Page 3</a></li>
      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#"><span class="glyphicon glyphicon-user"></span> Sign Up</a></li>
        <li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
      </ul>
    </div>
  </div>
</nav>

Я что-то не так с этим HTML? Или у кого-нибудь есть пример панели навигации, которая работает с ng-bootstrap?


person TSG    schedule 07.08.2017    source источник
comment
Вы добавили в свой проект Bootstrap CSS?   -  person ConnorsFan    schedule 07.08.2017
comment
да - и NgbCheckbox отлично отображается, поэтому компонент ng-bootstrap работает. Просто NAV выше нет   -  person TSG    schedule 07.08.2017


Ответы (2)


Поскольку компонента навигации нет, вам нужно будет использовать комбинацию функций сворачивания ng-bootstrap ngbCollapse, а также раскрывающийся список из NgbDropdown компонент.

Вам нужно будет привязать экземпляр ngbCollapse к div.collapse.navbar-collapse и логическому свойству в классе вашего компонента. ng-bootstrap не использует data-*, поэтому вы можете удалить такие атрибуты, как data-toggle="collapse".

Вы управляете состоянием открытия/закрытия сворачивающегося меню с помощью свойства класса вашего компонента, которое переключается true/false через что-то вроде события щелчка. В этом примере переключение через обработчик событий (click) на button.navbag-toggler выполняет метод компонента toggleMenu(), который просто инвертирует значение логического свойства isCollapsed с помощью оператора !.

Для раскрывающегося меню пункта меню вы должны использовать компонент NgbDropdown. . Вы должны применить атрибуты ngbDropdown и ngbDropdownToggle к элементу-контейнеру и элементу-переключателю соответственно.

<div class="nav-item dropdown" ngbDropdown>
  <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" ngbDropdownToggle>
    Dropdown
  </a>
  <div class="dropdown-menu" aria-labelledby="dropdownBasic1">
    <button class="dropdown-item">Action - 1</button>
    <button class="dropdown-item">Another Action</button>
    <button class="dropdown-item">Something else is here</button>
  </div>
</div>

С точки зрения стиля для Bootstrap 4 navbar вы ll необходимо использовать следующие классы:

Для панелей навигации требуется обертка .navbar с .navbar-toggleable-* для адаптивного свертывания и классов цветовых схем.

Кроме того, такие элементы, как button.navbar-toggle, теперь имеют button.navbar-toggler с буквой «r» в Bootstrap 4. Вы используете классы navbar-inverse и bg-inverse для стандартной обратной панели навигации.

HTML:

<nav class="navbar navbar-toggleable-md navbar-inverse bg-inverse">
  <button class="navbar-toggler navbar-toggler-right" type="button" aria-controls="appNavigation" [attr.aria-expanded]="!isCollapsed" aria-label="Toggle navigation" (click)="toggleMenu()">
    <span class="navbar-toggler-icon"></span>
  </button>
  <a class="navbar-brand" href="#">My App</a>
  <div class="collapse navbar-collapse" id="appNavigation" [ngbCollapse]="isCollapsed">
    <div class="navbar-nav mr-auto">
      <a class="nav-item nav-link" routerLink="" routerLinkActive="active">Home</a>
      <a class="nav-item nav-link" routerLink="/about" routerLinkActive="active">About</a>
      <div class="nav-item dropdown" ngbDropdown>
        <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" ngbDropdownToggle>
            Dropdown
        </a>
        <div class="dropdown-menu" aria-labelledby="dropdownBasic1">
          <button class="dropdown-item">Action - 1</button>
          <button class="dropdown-item">Another Action</button>
          <button class="dropdown-item">Something else is here</button>
        </div>
      </div>
    </div>
  </div>
</nav>

ТС:

export class NavigationComponent {
  isCollapsed = true;

  constructor() {}

  toggleMenu() {
    this.isCollapsed = !this.isCollapsed;
  }
}

Вот плункер, демонстрирующий функциональность и стиль в действии.

person Alexander Staroselsky    schedule 07.08.2017
comment
Спасибо ! Это очень помогло. Но один вопрос: как лучше всего добавить анимацию на открывающуюся и закрывающуюся панель навигации? Как в этой демонстрации (анимация сделана с помощью jQuery): blackrockdigital.github.io/startbootstrap-logo -навигация - person Wolf359; 21.09.2017
comment
@MehmetGunacti Анимации для сворачивания и аналогичные компоненты в настоящее время недоступны в ng-bootstrap. Вам нужно будет использовать что-то вроде Angular — Animations для анимации свойств сворачивания или переходов CSS3. Я бы не стал пытаться использовать jQuery. - person Alexander Staroselsky; 21.09.2017
comment
Что такое unpkg.com внутри index.html? Кроме того, что это за материал в config.js? У меня есть ng-книга по Angular 5, и я не думаю, что это там... - person Mike Glaz; 12.11.2017
comment
@mikeglaz unpkg — это CDN для пакетов npm. unpkg специально используется в примере с plunker, потому что обычно это самый быстрый способ получить необходимые зависимости для общедоступного примера/демо. Если вы создадите пустой проект Angular 2+ в plunker, используя встроенный шаблон, он автоматически сгенерирует index.html со ссылками cdn. В реальном производственном приложении вам лучше использовать какой-то процесс сборки, чтобы максимально эффективно упаковать все ваши зависимости. Спасибо! - person Alexander Staroselsky; 13.11.2017
comment
Спасибо. Может быть, это только я, но чтобы заставить ваш HTML работать, мне пришлось внести следующие изменения: 1 - ссылка ‹a class=navbar-brand href=#›My App‹/a› должна быть до кнопки ‹, а не после ; 2 - в первой строке navbar-inverse bg-inverse изменено на navbar-light bg-light 3 - в первой строке navbar-toggleable-md заменено на navbar-expand-md. - person Sergio Morstabilini; 13.10.2018
comment
Выпадающее меню также нуждается в изменении: div с выпадающим меню класса должен иметь атрибут ngbDropdownMenu. - person Sergio Morstabilini; 13.10.2018

Вместо использования ng-Bootstrap попробуйте использовать Angular для того же.

Маленький пример

Шаблон

<nav class="navbar navbar-toggleable-md navbar-light bg-faded  navbar-fixed-top">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown"
    aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation" (click)="isActive = !isActive"> // add this for the responsive button
    <span class="navbar-toggler-icon"></span>
  </button>
  <a routerLink="/home"><img src="angular.png" class = "myImage" alt="Image"/></a>
  <div class="collapse navbar-collapse" id="navbarNavDropdown" [ngClass]="{show : isActive}">
    <ul class="navbar-nav">
      <li class="nav-item dropdown" [routerLinkActive]="['active']" appDropdown> // add this directive for the dropdown
        <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Basic Concepts
        </a>
.....

Директива

 import {Directive, HostListener, HostBinding} from '@angular/core';

  @Directive({
    selector: '[appDropdown]'
  })
  export class DropdownDirective {

    private isOpen:boolean = false;

    @HostBinding('class.open') get opened(){
      return this.isOpen;
    }
    constructor() { }

    @HostListener('click')open(){
      this.isOpen = true;
    }

    @HostListener('mouseleave')close(){
      this.isOpen = false;
    }

Рабочий пример То же самое, панель навигации сверху сделана с использованием директив начальной загрузки и Angular Link

person Rahul Singh    schedule 07.08.2017