如何在来自另一个文件的控制器中定义变量?

How can I define a variable in a controller who is from another file?

这是我的示例代码:en.js

var translationsEN = {

USERNAME:     'Username',
PASSWORD:     'Password',
LOGIN:    'Login',
CANCEL:   'Cancel' };

和我的控制器:

.config(function ($routeProvider, $translateProvider) {
...
$translateProvider.translations('en_US', translationsEN);
$translateProvider.preferredLanguage('en_US');
...

我正在使用模块 angular-Pascal Precht 的翻译。 当我更新我的文件时,控制台中有消息:"translationsEN is not defined"(在我的控制器中)和来自我的语言文件的消息:"translationsEN is defined but never used"

如何在控制器中定义变量?我需要将变量定义为服务吗?

实现目标的 Angular 方法确实是使用 service or, in the case of a simple and constant variable, a constant service:

myModule.constant(
    'myModule.translations.EN',
    {
        USERNAME: 'Username',
        PASSWORD: 'Password',
        LOGIN: 'Login',
        CANCEL: 'Cancel'
    }
);

然后你所要做的就是将它注入到你的配置方法中:

myModule.config([
    '$routeProvider',
    '$translateProvider',
    'myModule.translations.EN',
    function ($routeProvider, $translateProvider, translationsEN) {
        // …
        $translateProvider.translations('en_US', translationsEN);
        $translateProvider.preferredLanguage('en_US');
    }
]);

如果出于某些原因,您绝对需要使用经典变量,例如因为它也在非 Angular 脚本中使用,请确保在配置方法之前声明它。

正如@Blackhole 在他的回答中所解释的那样,在 angular 中实现这一点的一般方法是使用提供者。

但是,在 angular-translate 的特定用例中,实现此目的的方法是使用 $translateProvider 加载翻译文件:

en.js 重命名为 en_US.json 并将其放入名为 /locales 的文件夹中。确保您的文件有效 json,即您要删除 var translationsEN =

然后像这样配置 $translateProvider :

$translateProvider.useStaticFilesLoader({
    prefix: '/locales/',
    suffix: '.json'
});

这将加载位于文件夹 /locales.

中的所有 json 翻译文件

这样您的翻译文件将完全独立于您的应用程序逻辑。