我是Angular的新手,在尝试使用Angular Bootstrap UI时我遇到了一个奇怪的问题。
我已经知道它正确注入,因为Typeahead组件工作正常。我刚开始将控制器中调用JQuery模式的旧代码切换到bootstrap中以使它们更易于测试,但由于某些原因,即使我将$ modal注入控制器,它仍然未定义,我无法使用它。
var MYAPP = MYAPP || {};
(function (angular) {
var common = MYAPP.common,
controllers = common.controllers,
directives = common.directives,
factories = common.factories,
filters = common.filters,
services = common.services,
repositories = common.repositories,
application = angular.module('MyModule', ['ngAnimate','ui.bootstrap']);
application.directive('positiveInteger', directives.positiveInteger);
application.filter('decimalPrecision', filters.decimalPrecisionFilter);
application.service('httpService', ['$http', repositories.httpService]);
MYAPP.application = application;
})(window.angular);
然后是模块(加载一个单独的js文件):
var MYAPP = MYAPP || {},
someModule = MYAPP.namespace('someModule');
(function (application) {
/****************** Controller definitions **********************/
application.controller('myController', ['$rootScope', '$scope', '$modal', someModule.myController]);
})(MYAPP.application);
然后是控制器代码:
var MYAPP = MYAPP || {},
someModule = MYAPP.namespace('someModule');
someModule.myController = function($rootScope, $scope, $modal) {
var _controller = this;
etc etc
然后使用上面的参数调用myController,包括注入的$ modal。 $ modal在控制器中未定义。
奇怪的是我可以看到ui.bootstrap在那里,因为检查加载的模块我可以看到它存在,其他组件也是如此。例如,angular.modules(' ui.bootstrap')返回ok。如果我拼写错误,或输入虚拟名称 - 它会像我期待的那样抱怨。
有趣的是,如果我输入“不好”的情况,同样适用。针对控制器的注入注释。例如:
application.controller('myController', ['$rootScope', '$scope', '$modalXXXYYY', someModule.myController]);
返回:
[$injector:unpr] Unknown provider: $modalXXXYYYProvider <- $modalXXXYYY <- myController
我不确定这里发生了什么 - 或者如何诊断它。我已经检查了一些显而易见的事情,比如它是否被加载了两次,但似乎没有这样的事情发生。它总体上是一个非常大的应用程序,因此大大简化了,但任何输入都会非常受欢迎。
提前致谢,
贝
答案 0 :(得分:0)
好的,我已经弄明白了 - 现在我觉得很蠢。
基本上我并没有以任何方式保持传入的值,所以虽然$ modal传递给控制器,但我调试的点(在控制器方法中)不再有范围内的变量 - 这给了我(假)的印象,它实际上并没有真正传递它。
这只是将值保存到控制器的情况,例如_controller.modalService = $ modal,并将其整理出来。