未知的提供者:$ 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 */ }];