如何在来自另一个文件的控制器中定义变量?
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 翻译文件
这样您的翻译文件将完全独立于您的应用程序逻辑。
这是我的示例代码: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
.
这样您的翻译文件将完全独立于您的应用程序逻辑。