Модуль ‘ui.bootstrap’ недоступен — Angularjs

#javascript #angularjs #angular-ui #angular-routing

#javascript #angularjs #angular-пользовательский интерфейс #угловая маршрутизация

Вопрос:

Я столкнулся со странной проблемой с моим проектом angularjs.

У меня есть веб-сайт, подобный — www.server.com/pwm (домашняя страница). На странице есть тег привязки, который переводит меня на другую страницу — www.server.com/publishers . Когда я загружаю домашнюю страницу и перехожу на страницу издателей, щелкнув тег привязки, все работает нормально. Но когда я напрямую ввожу URL-адрес в браузере, я получаю следующие исключения (например. Если я загружу домашнюю страницу www.server.com/pwm а затем введите «/ publishers» в конце URL-адреса)

[$injector:nomod] Модуль ‘ui.bootstrap’ недоступен! Вы либо неправильно написали имя модуля, либо забыли его загрузить. При регистрации модуля убедитесь, что вы указали зависимости в качестве второго аргумента. http://errors.angularjs.org/1.2.18 /$инжектор/nomod?p0=ui.bootstrap»

Запутанная часть заключается в том, что я включил необходимые библиотеки, и они отлично работают при навигации по веб-странице. Проблема возникает, когда я пытаюсь напрямую перейти на дочернюю страницу. Я использую ngRoute и шаблоны для загрузки страницы

 var pubsApp = angular.module('pubsApp', ['ngResource', 'ngRoute', 'ui.bootstrap'])
  

и мои файлы скриптов

 <script src="/Scripts/jquery-1.9.1.js" type="text/javascript"></script>
<script src="/Scripts/angular.js" type="text/javascript"></script>
<script src="/Scripts/angular-route.js" type="text/javascript"></script>
<script src="/Scripts/angular-sanitize.js" type="text/javascript"></script>
<script src="/Scripts/angular-resource.js" type="text/javascript"></script>
<script src="/Scripts/bootstrap.js" type="text/javascript"></script>
<script src="Scripts/angular-ui/ui-bootstrap.min.js" type="text/javascript"></script>
<script src="Scripts/angular-ui/ui-bootstrap-tpls.min.js" type="text/javascript"></script>
<script src="/js/app.js" type="text/javascript"></script>
  

Комментарии:

1. Это одностраничное приложение? Если да, то как выглядит ваша таблица маршрутизации?

2. я не знаком с angular для начальной загрузки, но разве вы не включаете оба, angular и jquery, а также оба их соответствующих bootstrap.js файлы? Я полагаю, что, по крайней мере, оставить /Scripts/bootstrap.js

3. Файлы src js для ui-bootstrap являются относительными, поэтому неудивительно, почему это не работает. Сделать их абсолютными, как остальные?

4. вам не нужно ui-bootstrap.min.js и ui-bootstrap-tpls.min.js . ui-bootstrap-tpls.min.js содержит весь код и шаблоны.

Ответ №1:

Все теги вашего скрипта используют абсолютные пути (они начинаются с / ), за исключением тегов angular-bootstrap; они используют относительные пути. Это означает, что они относятся к тому, где вы находитесь в браузере.

Все ваши файлы javascript расположены по адресу www.website.com/Scripts /… поскольку все ваши теги скрипта, кроме этих двух, используют абсолютные пути, они всегда будут искать скрипт в одном и том же месте. Однако два пути angulcar-bootstrap будут выглядеть в разных местах в зависимости от того, где вы находитесь в браузере.

Причина, по которой он работает, если вы не перейдете непосредственно на дочернюю страницу, заключается в том, что angular загружает файлы javascript только при начальной загрузке страницы, а не при навигации.

Поэтому просто измените теги скрипта angular-bootstrap, чтобы использовать абсолютные пути, как и остальные теги вашего скрипта.

Комментарии:

1. Это действительно хороший момент. Я проверю внесение этих изменений. Большое спасибо

Ответ №2:

У меня тоже была такая же проблема, и я ее решил. Подробности ниже.

Проверьте свой {{project_root}}/test/karma.conf.js

И обязательно bower_components/angular-bootstrap/ui-bootstrap-tpls.js в нем. В вашем случае вы должны поместить Scripts/angular-ui/ui-bootstrap-tpls.min.js в нем.

 files: [
  'bower_components/angular/angular.js',
  'bower_components/angular-mocks/angular-mocks.js',
  'bower_components/angular-animate/angular-animate.js',
  'bower_components/angular-cookies/angular-cookies.js',
  'bower_components/angular-resource/angular-resource.js',
  'bower_components/angular-route/angular-route.js',
  'bower_components/angular-sanitize/angular-sanitize.js',
  'bower_components/angular-touch/angular-touch.js',
  'bower_components/angular-bootstrap/ui-bootstrap-tpls.js',
  'app/scripts/**/*.js',
  'test/mock/**/*.js',
  'test/spec/**/*.js'
],
  

Ответ №3:

Я думаю, это не имеет ничего общего с ui-bootstrap. Эта проблема связана с угловой маршрутизацией. Пожалуйста, попробуйте это server.com/#/publishers (При вводе местоположения в адресной строке вручную).

Комментарии:

1. Я не думаю, что этот ответ помогает