Я продолжаю получать эту ошибку, поскольку я пытаюсь реализовать bootstrap Modal. Что может быть причиной этого? Я скопировал/вставил все из http://angular-ui.github.io/bootstrap/#/modal здесь.
Неизвестный поставщик: $modalProvider <- $модальная ошибка с AngularJS
Ответ 1
Такая ошибка возникает, когда вы пишете в зависимости от контроллера, службы и т.д., и вы не создали или не включили эту зависимость.
В этом случае $modal
не является известной услугой. Похоже, вы не проходили в ui-bootstrap в качестве зависимости при загрузке angular. angular.module('myModule', ['ui.bootstrap']);
Кроме того, убедитесь, что вы используете последнюю версию ui-bootstrap (0.6.0), чтобы быть в безопасности.
Ошибка выдается в версии 0.5.0, но обновление до 0.6.0 делает доступным $модальное обслуживание. Таким образом, обновите до версии 0.6.0 и обязательно запустите ui.boostrap при регистрации вашего модуля.
Ответ на ваш комментарий: Вот как вы вводите зависимость модуля.
<!-- tell Angular what module we are bootstrapping -->
<html ng-app="myApp" ng-controller="myCtrl">
JS:
// create the module, pass in modules it depends on
var app = angular.module('myApp', ['ui.bootstrap']);
// $modal service is now available via the ui.bootstrap module we passed in to our module
app.controller('myCtrl', function($scope, $uibModal) {
});
Обновление:
Служба $modal
была переименована в $uibModal
.
Пример использования $uibModal
// create the module, pass in modules it depends on
var app = angular.module('myApp', ['ui.bootstrap']);
// $modal service is now available via the ui.bootstrap module we passed in to our module
app.controller('myCtrl', function($scope, $uibModal) {
//code here
});
Ответ 2
5 лет спустя (это не было бы проблемой в то время):
Изменение пространства имен изменилось - вы можете наткнуться на это сообщение после обновления до более новой версии bootstrap-ui; вам нужно обратиться к $uibModal
и $uibModalInstance
.
Ответ 3
Просто дополнительная заметка для проблемы, которую я также испытал сегодня: У меня была аналогичная ошибка "Неизвестный поставщик: $aProvider", когда я включил мини-код/uglify моего исходного кода.
Как уже упоминалось в Angular руководстве docs (абзац: "Примечание по минимизации" ), вам нужно использовать синтаксис массива, чтобы сделать правильные ссылки поддерживаются правильно для инъекций зависимостей:
var PhoneListCtrl = ['$scope', '$http', function($scope, $http) { /* constructor body */ }];
Для примера Angular UI Bootstrap вы упомянули, что вы должны это заменить:
var ModalInstanceCtrl = function ($scope, $modalInstance, items) {
/* ...example code.. */
}
с этим обозначением массива:
var ModalInstanceCtrl = ['$scope', '$modalInstance', 'items', function ($scope, $modalInstance, items) {
/* copy rest of example code here */
}];
С этим изменением мой измененный код модального окна Angular UI был функциональным снова.
Ответ 4
Очевидным ответом на ошибку провайдера является отсутствие зависимости при объявлении модуля, как в случае добавления ui-bootstrap. Единственное, что многие из нас не учитывают, - это нарушение изменений при обновлении до новой версии. Да, следующее должно работать и не поднимать ошибку провайдера:
var app = angular.module('app', ['ui.router', 'ngRoute', 'ui.bootstrap']);
app.factory("$svcMessage", ['$modal', svcMessage]);
За исключением случаев, когда мы используем новую версию ui-boostrap. Теперь модальный поставщик определяется как:
.provider('$uibModal', function() {
var $modalProvider = {
options: {
animation: true,
backdrop: true, //can also be false or 'static'
keyboard: true
},
Советуем здесь, как только мы убедимся, что зависимости включены, и мы по-прежнему получаем эту ошибку, мы должны проверить, какую версию библиотеки JS мы используем. Мы также можем выполнить быстрый поиск и посмотреть, существует ли этот файл в файле.
В этом случае модальный провайдер должен теперь выглядеть следующим образом:
app.factory("$svcMessage", ['$uibModal', svcMessage]);
Еще одно примечание. Убедитесь, что ваша версия ui-bootstrap поддерживает вашу текущую версию угловой версии. Если нет, вы можете получить другие ошибки, такие как templateProvider.
Информацию можно найти по ссылке:
http://www.ozkary.com/2016/01/angularjs-unknown-provider-modalprovider.html
надеюсь, что это поможет.
Ответ 5
после проверки того, что у меня были все зависимости, я исправил проблему, переименовав $modal
в $uibmodal
и $modalInstance
в $uibModalInstance
Ответ 6
var ModalInstanceCtrl = ['$scope', '$modalInstance', function ($scope, $modalInstance, items) {
/* copy rest of example code here */
}];