Javascript 如何在angularjs中使用一个文件中定义的常量

Javascript 如何在angularjs中使用一个文件中定义的常量,javascript,angularjs,angularjs-module,Javascript,Angularjs,Angularjs Module,我在StackOverFlow中看到了几个与此相关的问题,但找不到正确的答案 假设在我的app.js文件中,我定义了一个常量对象,它基本上有控制器名称。当我使用“ui路由器”时,我想在状态更改时将控制器附加到视图 app.js var app = angular.module('myApp', ['ui.router']); app.constant('CONTROLLER', { ONE: 'ControllerOne', TWO: 'ControllerTwo' });

我在StackOverFlow中看到了几个与此相关的问题,但找不到正确的答案

假设在我的app.js文件中,我定义了一个常量对象,它基本上有控制器名称。当我使用“ui路由器”时,我想在状态更改时将控制器附加到视图

app.js

var app = angular.module('myApp', ['ui.router']);


app.constant('CONTROLLER', {
    ONE: 'ControllerOne',
    TWO: 'ControllerTwo'
});
现在我想使用这些常量在其他文件(比如Controller.js)中定义控制器名称。我尝试了两种方法,但都不管用

controller.js

var app = angular.module('myApp', ['CONTROLLER']);

app.controller(CONTROLLER.ONE, ['$scope', 'myFactory', function ($scope, myFactory) {
    $scope.result = myFactory.someAPI();
}]);
错误->未捕获引用错误:未定义控制器

甚至我也尝试在控制器中注入常数模块,这会产生同样的错误

var app = angular.module('myApp', ['CONTROLLER']);

app.controller(CONTROLLER.ONE, ['$scope', 'myFactory', 'CONTROLLER', function ($scope, myFactory, CONTROLLER) {
    $scope.result = myFactory.someAPI();
}]);
我知道第二种方法是错误的。我在主app.js文件中定义控制器名称,并在状态更改期间使用这些常量将控制器附加到视图。 我希望重用这些常量来定义控制器名称


我可能做错了什么。有什么建议吗?

您的代码表明您已将控制器常数正确地注入控制器构造函数中

var app = angular.module('myApp', ['CONTROLLER']);

app.controller(CONTROLLER.ONE, ['$scope', 'myFactory', 'CONTROLLER', function ($scope, myFactory, CONTROLLER) {
    // use constant here
}]);
也就是说,除了控制器函数本身之外,您只能访问常量。控制器、服务、工厂等的名称必须是可访问的字符串,在注入常量之前,情况并非如此

可以使用angular之外的普通旧JavaScript对象来定义名称

var CONTROLLER = {
    ONE: 'ControllerOne',
    TWO: 'ControllerTwo'
});

我只能猜测您正在尝试这样做,因为您正在编写的控制器或指令将在整个html中的多个点被引用/使用。

您的代码表明您已将控制器常量正确地注入控制器构造函数中

var app = angular.module('myApp', ['CONTROLLER']);

app.controller(CONTROLLER.ONE, ['$scope', 'myFactory', 'CONTROLLER', function ($scope, myFactory, CONTROLLER) {
    // use constant here
}]);
也就是说,除了控制器函数本身之外,您只能访问常量。控制器、服务、工厂等的名称必须是可访问的字符串,在注入常量之前,情况并非如此

可以使用angular之外的普通旧JavaScript对象来定义名称

var CONTROLLER = {
    ONE: 'ControllerOne',
    TWO: 'ControllerTwo'
});

我只能猜测,您之所以尝试这样做,是因为您正在编写的控制器或指令将在整个html中的多个点被引用/使用。

谢谢Yeager,现在看起来不错。我是一名Java开发人员,不熟悉JS世界-有点担心用简单的旧JS方式定义常量,因为我听说过很多关于全局名称空间被污染的事情。谢谢Yeager,现在看起来不错。我是一名Java开发人员,不熟悉JS世界——有点担心用简单的旧JS方式定义常量,因为我听说过很多关于全局名称空间被污染的事情。