未知提供程序:$modalProvider < - AngularJS$modal错误
Unknown provider: $modalProvider <- $modal error with AngularJS
当我尝试实现引导模态窗口时,我一直收到此错误。可能是什么原因?我已经从这里复制/粘贴了 http://angular-ui.github.io/bootstrap/#/modal 中的所有内容。
当您为控制器、服务等编写依赖项,并且尚未创建或包含该依赖项时,会发生此类错误。
在这种情况下,$modal
不是已知服务。听起来您在引导角度时没有将 ui-bootstrap 作为依赖项传递。 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 文档教程(段落:"关于缩小的说明")中所述,您必须使用数组语法来确保正确保留引用以进行依赖注入:
var PhoneListCtrl = ['$scope', '$http', function($scope, $http) { /* constructor body */ }];
对于您提到的 Angular UI 引导程序示例,您应该替换它:
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 模态窗口代码再次起作用。
提供程序错误的明显答案是声明模块时缺少依赖项,就像添加 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 版本支持您当前的 angularjs 版本。如果没有,您可能会收到其他错误,例如模板提供程序。
有关信息,请查看此链接:
http://www.ozkary.com/2016/01/angularjs-unknown-provider-modalprovider.html
希望对您有所帮助。
在检查我是否包含所有依赖项后,我通过将$modal
重命名为 $uibmodal
并将$modalInstance
重命名为 $uibModalInstance
来解决此问题
var ModalInstanceCtrl = ['$scope', '$modalInstance', function ($scope, $modalInstance, items) {
/* copy rest of example code here */
}];
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 修复AngularJS错误:提供程序必须从$get工厂方法返回值
- AngularJS错误:$interpolate:$routeParams的interr插值错误
- AngularJS错误:请求的键的值不是对象.keys@[本地代码]
- AngularJS错误处理:根据错误数组显示错误
- AngularJs 错误:$http请求虽然在控制器中定义
- Angularjs 错误中的简单选项卡系统
- AngularJS错误:$injector:unp未知提供程序-$modalInstanceProvider
- AngularJS错误”;element.childs(..).slideToggle不是函数“;
- Promise创建自定义失败不是函数Angularjs错误
- AngularJS错误:$rootScope:infdig Infinite$digest循环:达到10次$digest
- AngularJS错误:$injector:modulerr我的浏览器窗口中出现模块错误
- 使用带有AngularJS错误的ngRoute
- Angularjs:错误:'追加'对未实现接口FormData的对象调用.jQuery.param/ad
- IE中的AngularJS错误与样式与ng样式
- AngularJS 1.3 - 错误:错误:modulerr 模块错误(使用 ng-view,$routeProvide
- AngularJS 错误 current.$$route 未定义
- AngularJS 错误:$rootScope:infdig 无限$digest循环
- AngularJS 错误:无法读取未定义的属性“get”
- AngularJS错误:“参数'FirstCtrl'不是一个函数,未定义”