未知的提供者:$ modalProvider < – $ AngularJS的模态错误

我不断收到这个错误,因为我试图实现引导模态窗口。 可能是什么原因呢? 我从http://angular-ui.github.io/bootstrap/#/modal复制/粘贴了一切。

当您在控制器,服务等的依赖项中编写这种错误时,会发生这种错误,并且您尚未创build或包含该依赖项。

在这种情况下, $modal不是已知的服务。 这听起来像你没有通过ui-bootstrap作为依赖引导angular度。 angular.module('myModule', ['ui.bootstrap']); 此外,请确保您使用的是最新版本的ui-bootstrap(0.6.0),只是为了安全起见。

错误在0.5.0版本中抛出,但更新到0.6.0确实使$ modal服务可用。 所以,更新到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 }); 

5年后 (当时这不是问题)

命名空间已经改变 – 升级到更新版本的bootstrap-ui后,你可能会偶然发现这个消息; 你需要引用$uibModal$uibModalInstance

对于我今天也遇到的问题,只是一个额外的注意事项:当我打开缩小/丑化我的源代码时,我有一个类似的错误“未知的提供者:$ aProvider”

正如在Angular docs tutorial(段落:“关于缩小注释”)中所提到的,您必须使用数组语法来确保引用保持正确的dependency injection:

 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模式窗口代码再次function。

提供者错误的明显答案是在添加ui-bootstrap的情况下声明模块时缺less的依赖关系。 我们许多人没有考虑的一件事是升级到新版本时发生的突变。 是的,以下应该工作,不提高提供商错误:

 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 }, 

这里的build议是一旦我们确定依赖被包含,并且我们仍然得到这个错误,我们应该检查我们正在使用的JS库的版本。 我们也可以快速search,看看这个提供者是否存在于这个文件中。

在这种情况下,模态提供者现在应该如下所示:

 app.factory("$svcMessage", ['$uibModal', svcMessage]); 

再一个注意。 确保你的ui-bootstrap版本支持你当前的angularjs版本。 如果没有,你可能会得到像templateProvider其他错误。

有关信息请查看此链接:

http://www.ozkary.com/2016/01/angularjs-unknown-provider-modalprovider.html

希望能帮助到你。

在检查包含所有依赖关系后,我通过将$modal重命名$modal $uibmodal$modalInstance$uibModalInstance

 var ModalInstanceCtrl = ['$scope', '$modalInstance', function ($scope, $modalInstance, items) { /* copy rest of example code here */ }];