簡體   English   中英

如何在來自另一個文件的控制器中定義變量?

[英]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');
...

我正在使用Pascal Precht的angular-translate模塊。 當我更新文件時,在控制台中顯示的消息是:“ translationsEN未定義”(在我的控制器中),而來自我的語言文件的消息是:“ translationsEN已定義但從未使用”

如何在控制器中定義變量? 我需要將變量定義為服務嗎?

實現您的目標的Angular方法確實是使用服務,或者在簡單且恆定的變量的情況下,使用恆定的服務

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');
    }
]);

如果由於某些原因,您絕對需要使用經典變量,例如,因為它也在非角度腳本中使用,則只需確保在配置方法之前聲明它即可。

就像@Blackhole在他的回答中解釋的那樣,實現此目標的一般方法是使用提供程序。

但是, 在您的angular-translate特定用例中 ,實現此目的的方法是使用$translateProvider加載翻譯文件:

en.js重命名為en_US.json並將其放置在名為/locales的文件夾中。 確保您的文件是有效的json,即您要刪除var translationsEN =

然后像這樣配置$translateProvider

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

這將加載位於/locales文件夾中的所有json轉換文件。

這樣,您的翻譯文件將完全獨立於您的應用程序邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM