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

时间:2015-03-17 22:05:27

标签: javascript angularjs angular-translate

以下是我的示例代码: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');
...

我正在使用Pascal Precht的模块angular-translate。 当我更新我的文件时,在控制台中是消息:“来自未定义的translationsEN”(在我的控制器中)和来自我的语言文件的消息:“translationsEN已定义但从未使用过”

如何在Controller中定义变量?我是否需要将变量定义为服务?

2 个答案:

答案 0 :(得分:2)

实现目标的Angular方法确实是使用service,或者在简单和常量变量的情况下使用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脚本中,只需确保在配置方法之前声明它。

答案 1 :(得分:0)

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

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

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

然后像这样配置$translateProvider

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

这将加载位于/locales文件夹中的所有json翻译文件。

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