我在StackOverFlow中看到过与此相关的几个问题,但无法找到正确的答案。
在我的app.js文件中说我已经定义了一个基本上有控制器名称的常量对象。当我使用" ui-router"我想将控制器附加到状态更改的视图。
app.js
var app = angular.module('myApp', ['ui.router']);
app.constant('CONTROLLER', {
ONE: 'ControllerOne',
TWO: 'ControllerTwo'
});
现在我想使用这些常量在其他文件中定义Controller名称,比如controller.js。说明了我试过的几种方法,但是为我工作。
controller.js
var app = angular.module('myApp', ['CONTROLLER']);
app.controller(CONTROLLER.ONE, ['$scope', 'myFactory', function ($scope, myFactory) {
$scope.result = myFactory.someAPI();
}]);
ERROR -> Uncaught ReferenceError: CONTROLLER is not defined
即使我尝试在Controller中注入那个给出相同错误的常量模块。
var app = angular.module('myApp', ['CONTROLLER']);
app.controller(CONTROLLER.ONE, ['$scope', 'myFactory', 'CONTROLLER', function ($scope, myFactory, CONTROLLER) {
$scope.result = myFactory.someAPI();
}]);
我知道第二种方式是错误的。当我在我的主app.js文件中定义控制器名称时,使用这些常量在状态更改期间将控制器附加到视图。 我想重用那些常量来定义控制器名称。
我可能做错了什么。有什么建议吗?
答案 0 :(得分:0)
您的代码显示您已将CONTROLLER常量正确地注入控制器构造函数。
var app = angular.module('myApp', ['CONTROLLER']);
app.controller(CONTROLLER.ONE, ['$scope', 'myFactory', 'CONTROLLER', function ($scope, myFactory, CONTROLLER) {
// use constant here
}]);
话虽如此,除了控制器功能本身之外,您只能访问常量。控制器,服务,工厂等的名称必须是可访问的字符串,在注入常量之前不是这种情况。
您可以使用角外的普通旧JavaScript对象来定义名称。
var CONTROLLER = {
ONE: 'ControllerOne',
TWO: 'ControllerTwo'
});
我只能猜测你是在尝试这样做,因为你写的控制器或指令将在你的html中的多个点被引用/使用。