似乎您没有将
$modal服务作为依赖项注入。
如何“注入服务”?
考虑
function您正在尝试使用该服务…您应该这样声明:
['$modal', function($modal) { // $modal has been injected here, you can use it}]编辑:
我已经研究了您Plunk …它使简单的事情变得过于复杂,并且揭示了一些有关AngularJS概念(控制器,范围等)的误解。
另外,它使用的是Bootstrap的3 CSS-当前与AngularJS Bootstrap不兼容。我将CSS链接更改为Bootstrap 2。
看看它如何变得更加简单和有效:http :
//plnkr.co/edit/YFuAA5B65NZggd6fxjCh?p=preview
我建议您从头到尾仔细研究本文档:http :
//docs.angularjs.org/guide/concepts
该视频也非常好,但是没有提供对概念的更深入了解:http :
//weblogs.asp.net/dwahlin/archive/2013/04/12/video-tutorial-angularjs-
fundamentals-in-60 -ish-
minutes.aspx
基本上,错误消息告诉您正在尝试将服务注入到某种内容中(在您的情况下为“ ModalController”)-但是找不到此服务。
“我是怎么注射的?”
-您可能会问。答案是:在Controller函数中需要的每个参数都是要“注入”的“依赖项”-AngularJS“注入器”服务执行此任务。这就是“ $
scope”参数如何神奇地接收“ scope”的原因-注入器在幕后工作。
在您的ModalController中,注入器试图同时满足“ $ modalInstance”和“ items”依赖性(删除“ $
modalInstance”参数-错误消息将更改为“找不到itemsProvider”)…
如果要通过注入器的“神奇”工作接收到这样的依赖关系,则需要使用这些名称来创建/声明服务…(或在尝试时正确使用“ resolve”属性)。 。
…但是在这种情况下根本不需要。您只想访问“项目”,然后返回一个选定的项目。您还试图通过编程方式关闭/关闭模态。
您可以通过“ resolve”属性来解决依赖关系,但是为什么要这么简单才能实现那么复杂呢?只需使用“ scope”属性,并为模态提供范围-
它就可以访问其属性。模态还会自动将“ $ close”和“ $ dismiss”函数添加到作用域,因此您可以轻松使用这些函数。
您试图通过将属性作为服务注入到模式控制器中来将属性从主作用域传递到模式作用域!:-)您试图将自己的模态实例注入其控制器中!!!
因此,您的主要问题与
$injector-值得研究该 注入 物的全部内容-在上面链接的文档中有很好的解释。
“注入服务”并不像“将变量传递给函数”那样简单。您几乎可以通过“ resolve”属性到达那里,但是正如我所说的-对于这种简单情况,确实不需要。
我创建了另一个Plunker而不使用“ scope”,并保留了“ resolve” …无法像对“ items”一样注入“ modalInstance”:
'$modalInstance': function() { return modalInstance; }…因为目前仍在
undefined…我们可以通过仅调用
$scope.$closeModalController(而不是注入模态)来解决…
…或者像我一样,通过一个函数注入它…非常疯狂,但它的工作原理是:
http://plnkr.co/edit/9AhH6YFBUmhYoUDhvnhQ?p=preview
…我永远不会这样…只是为了学习!
最后但并非最不重要的一点:通过添加
ng-controller模板文件,您需要两次ModalController
…您已经在模态配置中声明了它。但是,通过模式配置,您可以通过解析器进行依赖项注入-而通过模板,则无需应用“解析”。
更新:
正如Mahery的评论中指出的那样,
$modalInstanceAngularUI的Bootstrap实现使控制器中的注入成为可用。因此,我们无需费劲“解决”或以某种方式使它可用。
这是更新的Plunker:http
://plnkr.co/edit/BMfaFAWibHphDlZAkZex?p=preview
确实,发生错误的主要原因是模板中的“ ng-controller”属性。通过这种方式创建的控制器不会收到“ AngularUI处理”。仅在模态
选项中 指定的控制器会在提供的位置获得“处理”
$modalInstance…



