【发布时间】:2015-07-16 18:54:52
【问题描述】:
我是 Angular 的新手,在尝试使用 Angular Bootstrap UI 时遇到了一个奇怪的问题。
我已经知道它被正确注入了,因为 Typeahead 组件工作正常。我刚刚开始将在控制器中调用 JQuery 模态的旧代码切换到引导程序中,以使它们更具可测试性,但由于某种原因,即使我将 $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
我不确定这里发生了什么 - 或者如何诊断它。我已经检查了明显的事情,比如它是否被加载了两次,但似乎没有这样的事情发生。总体而言,这是一个相当大的应用程序,因此已大大简化,但任何输入都将不胜感激。
提前致谢,
托尼
【问题讨论】:
-
您是否忘记将
$modal注入控制器功能?它在依赖项数组中,但未显示函数 -
感谢您的回复。我已经使用上面控制器文件中的 sn-p 进行了更新。
标签: angularjs angular-ui-bootstrap angular-bootstrap