Bootstrap не работает должным образом в Angular 6

Я начал изучать Angular и следую руководству. Я попытался ввести код, как в учебнике для панели навигации:

<nav class = "navbar navbar-default">
  <div class = "container-fluid">
     <div class = "navbar-header">
         <a href = "#" class = "navbar-brand">Recipe book</a>
     </div>
     <div class = "collapse navbar-collapse">
         <ul class = "nav navbar-nav">
             <li> <a href = "#">Recipe</a></li>
             <li> <a href = "#">Shopping list</a></li>
         </ul>
         <ul class = "nav navbar-nav navbar-right">
              <li class = "dropdown">
                  <ul class = "dropdown-menu">
                      <li><a href = "#">Save data </a></li>
                      <li><a href = "#">Fetch data </a></li>
                  </ul>
              </li>
         </ul>
     </div>
  </div>
</nav>

Но все, что я получаю, это:

Bootstrap не работает должным образом в Angular 6

Если я удалю bootstrap, я получу другие элементы.

Я использовал npm install bootstrap --save и @import "~bootstrap/dist/css/bootstrap.css"; в styles.css для использования начальной загрузки.

Обновлено:

Я не хотел открывать вопрос с двумя проблемами, но, посмотрев на ответы, я не смог описать еще одну проблему, которая у меня была:

Я также установил JQuery с помощью nmp install jquery --save и добавил в angular.json:

"styles": [
          "node_modules/bootstrap/dist/css/bootstrap.css",
          "src/styles.css"
        ],
        "scripts": [
          "node_modules/jquery/dist/jquery.min.js",
          "node_modules/tether/dist/js/tether.js",
          "node_modules/bootstrap/dist/js/bootstrap.min.js"

В этом случае, после удаления @import "~bootstrap/dist/css/bootstrap.css"; из styles.css`, bootstrap вообще не работает. Единственный способ заставить меня работать с начальной загрузкой - это то, что я описал в вопросе.

Обновлено еще раз:

Я начал новый проект и последовал инструкциям @HDJEMAI. Теперь я по-прежнему получаю ту же страницу, что и на картинке, но теперь она работает со строками, добавленными к стилям и скриптам в angular.json, а не через @import "~bootstrap/dist/css/bootstrap.css" в файле styles.css. Но проблема по-прежнему в том, что это не то же самое, что в учебнике, хотя код тот же.

Вот что он получает в уроке: Bootstrap не работает должным образом в Angular 6

Глядя на снимок экрана, кажется, что он работает должным образом. Возможно, вы захотите добавить класс bg-light, но я думаю, это зависит от того, как вы ожидали, что он будет выглядеть

user184994 06.10.2018 09:01

Думаю, сработает такое решение: stackoverflow.com/questions/51870386/…

Kinjal Vithalani 06.10.2018 09:06

@ATT: после обновления файла сценария angular.json вам, вероятно, потребуется запустить npm install или заново собрать приложение.

HDJEMAI 06.10.2018 09:55

@HDJEMAI Qeuration обновлено

ATT 06.10.2018 13:12

@ATT: я использую эту конфигурацию в своем ответе в реальном рабочем проекте, это хороший ответ. Для вашего конкретного проекта вы должны добавить любую дополнительную зависимость, которая вам нужна. или создайте реальный пример как можно ближе к вашему приложению с помощью stackblitz, на который я могу взглянуть, или кто-то другой может взглянуть на то, какая остающаяся проблема у вас есть. Итак, подумайте, по крайней мере, принять ответ, если вы можете заставить работу начальной загрузки без импорта вручную необходимых файлов. Таким образом, это поможет другим людям с той же проблемой.

HDJEMAI 06.10.2018 18:53

Вы можете исправить проблему в файле Angular.json, например исправить бутстрап в angular.json

Iman Bahrampour 23.04.2019 12:17
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
27
6
65 569
23
Перейти к ответу Данный вопрос помечен как решенный

Ответы 23

Добавьте свой angular.json

{
    "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
    "version": 1,
    "newProjectRoot": "projects",
    "projects": {
        "xtreme-admin-angular": {
            "root": "",
            "sourceRoot": "src",
            "projectType": "application",
            "prefix": "app",
            "schematics": {},
            "architect": {
                "build": {
                    "builder": "@angular-devkit/build-angular:browser",
                    "options": {
                        "outputPath": "dist/xtreme-admin-angular",
                        "index": "src/index.html",
                        "main": "src/main.ts",
                        "polyfills": "src/polyfills.ts",
                        "tsConfig": "src/tsconfig.app.json",
                        "assets": [
                            "src/favicon.ico",
                            "src/assets"
                        ],
                        "styles": [
                            "node_modules/bootstrap/dist/bootstrap.min.css"
                             //Your root depend this path
                        ]

И перезапустите свой проект

Это сработало лучше всего для меня. Единственное отличие состоит в том, что я оставил включенным мой файл styles.css в массив стилей.

SauerTrout 11.04.2020 04:09
Ответ принят как подходящий

Вы должны установите как bootstrap, так и JQuery:

npm install bootstrap jquery --save

Затем вы найдете эти файлы в папке модуля узла:

node_modules/jquery/dist/jquery.min.js
node_modules/bootstrap/dist/css/bootstrap.min.css
node_modules/bootstrap/dist/js/bootstrap.min.js

Затем вам нужно обновить файл angular.json:

В разделах architect, build или даже test, если вы хотите увидеть, что Bootstrap также работает при тестировании приложения.

"styles": [
    "styles.css",
    "./node_modules/bootstrap/dist/css/bootstrap.min.css"
  ],
  "scripts": [
    "./node_modules/jquery/dist/jquery.min.js",
    "./node_modules/bootstrap/dist/js/bootstrap.min.js"
  ],

Если не добавить скрипт jquery.min.js Bootstrap, работать не будет.

Еще одно требование - это popper.js, если вам нужен Выпадающее меню Bootstrap, вам нужно будет установить его и также добавить файл сценария

npm install popper.js

Затем добавьте и этот скрипт

"styles": [
    "styles.css",
    "./node_modules/bootstrap/dist/css/bootstrap.min.css"
  ],
  "scripts": [
    "./node_modules/jquery/dist/jquery.min.js",
    "./node_modules/popper.js/dist/popper.js",
    "./node_modules/bootstrap/dist/js/bootstrap.min.js"
  ],

В раскрывающемся списке Bootstrap требуется Popper.js (https://popper.js.org)

Вероятно, проблема с отсутствующим './' перед node_modules

User M 03.03.2020 07:25

Пробовал HDJEMAI по-своему, все заработало, но пришлось перезапустить приложение. В случае, если я внесу изменения в файл css, он сразу же отразился, но когда я внес изменения в angular.json, мне пришлось перезапустить приложение (Ctrl + C, а затем ng serve)

User M 03.03.2020 20:18

дорогой друг, я изучаю тот же урок по angular6. Я также столкнулся с такой же ситуацией. Наконец, я решил это Сначала удалите bootstrap. Следующим шагом является установка начальной загрузки с помощью следующей команды

npm install --save bootstrap@3 A

затем перейдите в styles.css и вставьте

@import "node_modules/bootstrap/dist/css/bootstrap.css"

ваше приложение определенно будет работать точно так же, как и в этом видеоуроке udemy

@baiju krishnan: Bootstrap требует JQuery. Пожалуйста, прочтите документацию здесь: getbootstrap.com/docs/4.3/getting-started/introduction. Вот небольшая часть оттуда: многие из наших компонентов требуют использования JavaScript для работы. В частности, для них требуются jQuery, Popper.js и наши собственные плагины JavaScript. ...

HDJEMAI 15.11.2019 02:28

Я также начал работать над изучением angular, и ваше решение сработало. Зачем нам нужно копировать оператор @import, когда он должен работать, добавляя файл angular.json. Я считаю, что ответ HDJEMAI достаточно хорош, но я не уверен, почему это не сработало, а это сработало.

User M 03.03.2020 07:28

@baiju Кришнан: спасибо за ответ. использовал "../node_modules/bootstrap/dist/css/bootstrap.css", и это работает для меня

Jks 04.12.2020 17:06
install npm install bootstrap@latest jquery --save
install npm install popper.js;

затем перейдите в файл Angular.json (строка № 47), измените строки следующим образом:

"styles": [
    "src/styles.css",
    "./node_modules/bootstrap/dist/css/bootstrap.min.css"
],
"scripts": [
    "./node_modules/jquery/dist/jquery.min.js",
    "./node_modules/popper.js/dist/popper.js",
    "./node_modules/bootstrap/dist/js/bootstrap.min.js"
],

Вышеупомянутый метод хорош, но иногда он работает, иногда нет, даже если вы все делаете правильно. Лично я предпочитаю загружать css / js вручную и хранить их в папке с ресурсами и предоставлять ссылку в index.html. Если что-то пойдет не так, консоль браузера сообщит вам о проблеме, тогда как при обычном подходе консоль браузера не предоставляет никакой информации / ошибок.

Я сделал то же самое, что и в ответах выше, но столкнулся с той же проблемой. В моем случае я имел в виду неправильный путь popper.js в angular.json

"node_modules/popper.js/dist/js/popper.js",

вместо того

"node_modules/popper.js/dist/umd/js/popper.js",

Я была такая же проблема. Ниже мне помогло.

Остановите сервер и перекомпилируйте, используя нг подавать

Я согласен с тем, что после перезапуска сервера с помощью Ctrl + C / ng serve я смог запустить bootstrap без необходимости добавлять эту строку: @import '~bootstrap/dist/css/bootstrap.min.css';

Yassir Khaldi 06.01.2020 10:48

Альтернативный и более простой подход для добавления начальной загрузки - это поместить ссылку CDN в головной раздел index.html (в этом случае нет необходимости устанавливать загрузку через npm):

ссылка rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"

Это будет работать !!

Как я вижу, если вы следите за курсом Максимилиана Шварцмюллера в UDEMY, убедитесь, что вы установили Bootstrap 3, а не что-нибудь еще. Используйте эти команды в папке вашего проекта (удаление, только если установлена ​​другая версия).

npm uninstall --save bootstrap
npm install --save bootstrap@3

Это установит его локально в ваш проект.

У меня был установлен Bootstrap4 (думал, что курс по-прежнему будет работать с 4 вместо 3), и использование Bootstrap3 вместо этого работало в том же проекте, что и ваш в курсе (без popper и jQuery).

Есть идеи, чего не хватает в bootstrap 4

MR AND 10.04.2020 19:11

После установки бутстрапа и добавления его в файл angular.json.

Если bootstrap не отображается, просто измените порт URL разработки:

ng serve --port <your choice of port>

Я думаю, это из-за проблемы с загрузкой, попробуйте следующее:

Шаг 1. Внутри файла .angular-cli.json

"styles": [
        "styles.css",
        "../node_modules/bootstrap/dist/css/bootstrap.min.css" 
 ]

Удалить "../node_modules/bootstrap/dist/css/bootstrap.min.css"

Шаг 2. Перейти к styles.css

Импортируйте бутстрап, добавив эту строку

@import "~bootstrap/dist/css/bootstrap.css";

Эти шаги устранили ошибки, которые я получил в процессе сборки.

Устал от многих вещей, но вот что сработало для меня сегодня:

package.json

  "dependencies": {
    "@angular/animations": "~8.2.5",
    "@angular/common": "~8.2.5",
    "@angular/compiler": "~8.2.5",
    "@angular/core": "~8.2.5",
    "@angular/fire": "^5.2.1",
    "@angular/forms": "~8.2.5",
    "@angular/platform-browser": "~8.2.5",
    "@angular/platform-browser-dynamic": "~8.2.5",
    "@angular/router": "~8.2.5",
    "bootstrap": "^4.3.1",
    "bootstrap-sass": "^3.3.7",
    "firebase": "^6.6.0",
    "jquery": "^3.4.1",
    "moment": "^2.24.0",
    "node-sass": "^4.11.0",
    "popper.js": "^1.15.0",
    "rxjs": "~6.4.0",
    "tslib": "^1.10.0",
    "zone.js": "~0.9.1"
  }

angular.json

            "styles": [
              "src/styles.scss",
              "node_modules/bootstrap/dist/css/bootstrap.min.css"
            ],
            "scripts": [
              "node_modules/jquery/dist/jquery.min.js",
              "node_modules/popper.js/dist/umd/popper.js",
              "node_modules/bootstrap/dist/js/bootstrap.min.js"
            ]

Я проверяю много способов

"../"... или "./"... или / также я не хочу использовать в "style.css", потому что, возможно, захочу добавить некоторые файлы "js" или файлы "css", которые зависят от файла "js" по этой причине лучший способ был

 "styles": [
                        "src/styles.css",
                        "node_modules/bootstrap/dist/css/bootstrap.min.css"
                    ],
                    "scripts": [
                        "node_modules/jquery/dist/jquery.min.js",
                        "node_modules/popper.js/dist/umd/popper.min.js",
                        "node_modules/bootstrap/dist/js/bootstrap.min.js"
                    ]

НО перезагрузите компьютер не только браузер или IDE

Добавьте эти 3 ссылки в свой файл index.html. Вам не нужно устанавливать bootstrap или jquery или обновлять файл angular.json. Работает как оберег.

    <link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
    <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>

Это всего лишь быстрое исправление, оно не соответствует правильному размещению вещей во фреймворке Angular.

Carmela 09.05.2020 08:05

Если вы добавляете путь начальной загрузки в файл angular.json, убедитесь, что это стили в проекте \ architecture \ строить. Не тот, что в проекте \ архитектор \ тестовое задание.

{
"projects": {
        "architect": {
            "build": {
                    "styles": [
                        "node_modules/bootstrap/dist/bootstrap.min.css",
                         "src/styles.css"
                    ],
            "test": {
                    "styles": [
                         "src/styles.css"
                    ],

Да, но просто для информации, я уже использовал это в проект \ архитектор \ тест, потому что иногда вам понадобится - для расширенной отладки - чтобы найти элементы CSS для компонента ag-grid, чтобы иметь возможность выполнять модульные тесты или тесты e2e, поэтому при отладке режим с хромом, у вас будет доступ к реальному пользовательскому интерфейсу, а затем вы можете легко захватить некоторые элементы.

HDJEMAI 09.05.2020 12:54

Я поддерживаю это только потому, что обнаружил, что внесенные мной изменения были на стадии тестирования. Это легко упустить из виду, и это сэкономило мне время. Спасибо.

prajitgandhi 14.10.2020 00:59

Были те же проблемы с элементами начальной загрузки с использованием редактора кода VS. Я пробовал ng build до того, как ng serve, и элементы начальной загрузки работали нормально.

Я столкнулся с той же проблемой, и я также следовал тому же курсу от udemy, добавив класс «nav-expand-lg» во внешний тег навигации, решивший мою проблему. мой файл angular.json также такой же, как ответил @HDJEMAI

<nav class = "navbar nav-expand-lg navbar-default">
  <div class = "container-fluid">
     <div class = "navbar-header">
         <a href = "#" class = "navbar-brand">Recipe book</a>
     </div>
     <div class = "collapse navbar-collapse">
         <ul class = "nav navbar-nav">
             <li> <a href = "#">Recipe</a></li>
             <li> <a href = "#">Shopping list</a></li>
         </ul>
         <ul class = "nav navbar-nav navbar-right">
              <li class = "dropdown">
                  <ul class = "dropdown-menu">
                      <li><a href = "#">Save data </a></li>
                      <li><a href = "#">Fetch data </a></li>
                  </ul>
              </li>
         </ul>
     </div>
  </div>
</nav>

Я бы начал с проверки "стилей" и "скриптов" в разделах "строить" и "test".

Я также столкнулся с этой же проблемой. После долгих проб и ошибок я наконец понял, что проблема связана с использованием синтаксиса bootstrap 3 с библиотекой bootstrap 4. Проверьте версию начальной загрузки в package.json, а затем определите синтаксис начальной загрузки. Обновите этот <nav class = "navbar navbar-expand-sm bg-dark navbar-dark">, и ваш код должен работать.

Добавьте эту строку в style.css, и она заработает.

@import "~bootstrap/dist/css/bootstrap.css";

Спасибо

Пожалуйста, проверьте все ваши файлы .component.ts, особенно recipe.component.ts.. Возможно, есть настройка инкапсуляции CSS, например

@Component({
  selector: 'app-recipes',
  templateUrl: './recipes.component.html',
  styleUrls: ['./recipes.component.css'],
  encapsulation: ViewEncapsulation.ShadowDom
})

Если это так. Вы должны удалить свойство инкапсуляции.

Мне пришлось сделать и то, и другое: скопировать jquery-файлы node_modules и js-файлы начальной загрузки в angular.json.

    "styles": [
        "src/styles.css",
        "node_modules/bootstrap/dist/css/bootstrap.min.css"
    ],
    "scripts": [
        "node_modules/jquery/dist/jquery.min.js",
        "node_modules/bootstrap/dist/js/bootstrap.min.js"
    ]

И копируем @import "~bootstrap/dist/css/bootstrap.css"; в styles.css

Со своей стороны, я решил эту проблему, добавив следующее в файл "style.css", и это сработало.

@import "~bootstrap/dist/css/bootstrap.css" 

Другие вопросы по теме