Javascript 未知提供程序:$modalProvider<;-$带角度的模态误差

Javascript 未知提供程序:$modalProvider<;-$带角度的模态误差,javascript,angularjs,modal-dialog,Javascript,Angularjs,Modal Dialog,我一直收到这个错误,因为我试图实现引导模式窗口。原因可能是什么?我已经从这里复制/粘贴了所有内容。当您写入控制器、服务等的依赖项,而您尚未创建或包含该依赖项时,就会发生这种错误 <!-- tell Angular what module we are bootstrapping --> <html ng-app="myApp" ng-controller="myCtrl"> 在这种情况下,$modal不是已知的服务。听起来,在引导时,您并没有将ui引导作为依赖项传递an

我一直收到这个错误,因为我试图实现引导模式窗口。原因可能是什么?我已经从这里复制/粘贴了所有内容。

当您写入控制器、服务等的依赖项,而您尚未创建或包含该依赖项时,就会发生这种错误

<!-- tell Angular what module we are bootstrapping -->
<html ng-app="myApp" ng-controller="myCtrl">
在这种情况下,
$modal
不是已知的服务。听起来,在引导时,您并没有将ui引导作为依赖项传递<代码>angular.module('myModule',['ui.bootstrap']) 该错误在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">
更新:
$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
});

对于我今天也遇到的一个问题,只需补充一点: 当我打开源代码的缩小/uglify时,我遇到了一个类似的错误“未知提供者:$aProvider”

如中所述,您必须使用数组语法确保正确保留引用以进行依赖项注入:

var PhoneListCtrl = ['$scope', '$http', function($scope, $http) { /* constructor body */ }];
对于您提到的问题,您应该将其替换为:

var ModalInstanceCtrl = function ($scope, $modalInstance, items) { 
   /* ...example code.. */
}
使用此数组表示法:

var ModalInstanceCtrl = ['$scope', '$modalInstance', 'items', function ($scope, $modalInstance, items) { 
   /* copy rest of example code here */ 
}];
通过这一更改,我的缩小的角度UI模式窗口代码再次起作用。

var ModalInstanceCtrl=['$scope','$modalInstance',function($scope,$modalInstance,items){
/*将示例代码的其余部分复制到此处*/
}];
五年后(这在当时不是问题):


名称空间已更改-升级到较新版本的引导ui后,您可能会偶然发现此消息;您需要参考
$uibModal
&
$uibModalInstance

提供程序错误的明显答案是在声明模块时缺少依赖项,就像在添加ui引导时一样我们中的许多人没有考虑到的一件事是升级到新版本时出现的破坏性更改。是的,以下操作应该可以正常工作,并且不会引发提供程序错误:

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引导版本支持当前的angularjs版本。否则,可能会出现其他错误,如templateProvider

有关信息,请查看此链接:


希望能有所帮助。

在检查是否包含所有依赖项后,我将
$modal
重命名为
$uibmodal
并将
$modalInstance
重命名为
$uibModalInstance

我添加了ui.bootstrap,但仍然收到相同的错误?我们需要添加皮带指令吗?正如这里所说的@Ranadheer,你的链接是关于角带的(这是一个不同的库)。正如我所说,您要么使用旧版本的ui引导,要么没有添加依赖项。另一个答案也是相关的,你需要在缩小时传递名称,但听起来你现在不是在处理缩小。嗨@m59。你是我的朋友。我包括了旧版本的ui引导。现在我加入了新版本,它运行良好。非常感谢:-)现在$modal应该是$uibModal。不确定它在哪个版本中改变了,但我花了很长时间试图让$modal工作,直到发现它不再工作。。。$modalInstance也一样,改成$UIBModalinstance很遗憾他们一次又一次地改变它。首先是$dialog,然后是$modal,现在是$uibModal。只是生病了。谢谢你更新答案。帮了我。我不认为他现在正在处理缩小,但这是值得注意的,因为它也可能导致相同的问题。看看你可以在缩小之前运行它。然后,您可以继续编写缩写形式,并依赖于DI的参数名称,而缩小仍然有效,因为ngmin确实扩展到了数组版本。谢谢。我在两个应用程序中使用了相同的代码,但在最后一个应用程序中不起作用。此命名更改可能会中断工作应用程序!!!谢谢从版本1.0.0开始,$Modal和$ModalInstance已被弃用,changelog$ModalInstance完全不适用于我$uibModalInstance DIAND包含所有前缀更改的列表。