Angular-translate : 更改语言时如何刷新内容(api 请求)?
Angular-translate : How can I refresh content (api request) when I change language?
我是 AngularJS 的新手,我试图了解如何使用它。我正在使用 angular-translate 来翻译我的网站并且它可以工作,但我对数据库中的动态内容有疑问。
我通过 api 请求获取动态内容。我想 "redo" 使用正确语言的请求,以使用正确语言重新加载内容。
我捕获了 "translateChangeSuccess" 事件,但我如何才能 "redo" 之前的 api 请求?
非常感谢您的帮助:)
ps : 对不起我的英语
编辑:
// my run block :
(function ()
{
'use strict';
angular
.module('fuse')
.run(runBlock);
function runBlock($rootScope, $timeout, $state, $cookieStore)
{
$rootScope.$on('$translateChangeSuccess', function () {
// catch translateChangeSuccess event
// redo the previous api request
});
}
})();
// my change language function
/**
* Change Language
*/
function changeLanguage(lang)
{
angular.forEach(vm.languages, function(value, key) {
if (lang.code == key)
$translate.use(lang.code); // launch translateChangeSuccess event
});
}
// my api service
function apiService($http, $resource, $translate, CONFIG_API)
{
// change header with good language
$http.defaults.headers.common["Accept-Language"] = $translate.proposedLanguage();
var api = {};
// Base Url
api.baseUrl = CONFIG_API.base_url;
// request to reload when user changes language
api.Documents = $resource(api.baseUrl + 'documents/:id',
{id: '@id'},
{update: {method: 'PUT'}}
);
...
}
在 translateChangeSuccess
事件中使用所需语言的当前参数再次请求(暗示服务器会根据语言向您发送不同的内容)
我不能给你一个具体的例子,因为有很多方法可以管理它。
用一些代码你可以有更好的解释。
好的,所以我找到了如何做到这一点。我只是通过 service (apiResolver)
再次向 api 请求数据
test.module.js :
(function ()
{
'use strict';
angular
.module('app.test_module', [])
.config(config);
/** @ngInject */
function config($stateProvider, msApiProvider)
{
// State
$stateProvider.state('app.test_module', {
url : '/myurl',
views : {
'content@app': {
templateUrl: 'mytemplate.html',
controller : 'MyController as vm'
}
},
resolve : {
test : function (apiResolver)
{
return apiResolver.resolve('myquery@query');
}
}
});
}
})();
和test.controller.js:
(function ()
{
'use strict';
angular
.module('app.test_module')
.controller('testController', testController);
/** @ngInject */
function testController($rootScope, apiResolver, dataToDisplay)
{
var vm = this;
// Data
vm.dataToDisplay = dataToDisplay;
$rootScope.$on('$translateChangeSuccess', function () {
// reload my content
apiResolver.resolve('myquery@query')
.then(function(result) {
vm.dataToDisplay = result;
});
});
}
// more code here but not usefull in this example
})();
也许有更好的方法但它有效,当用户更改语言时我的数据会被翻译 :)
我是 AngularJS 的新手,我试图了解如何使用它。我正在使用 angular-translate 来翻译我的网站并且它可以工作,但我对数据库中的动态内容有疑问。
我通过 api 请求获取动态内容。我想 "redo" 使用正确语言的请求,以使用正确语言重新加载内容。
我捕获了 "translateChangeSuccess" 事件,但我如何才能 "redo" 之前的 api 请求?
非常感谢您的帮助:) ps : 对不起我的英语
编辑:
// my run block :
(function ()
{
'use strict';
angular
.module('fuse')
.run(runBlock);
function runBlock($rootScope, $timeout, $state, $cookieStore)
{
$rootScope.$on('$translateChangeSuccess', function () {
// catch translateChangeSuccess event
// redo the previous api request
});
}
})();
// my change language function
/**
* Change Language
*/
function changeLanguage(lang)
{
angular.forEach(vm.languages, function(value, key) {
if (lang.code == key)
$translate.use(lang.code); // launch translateChangeSuccess event
});
}
// my api service
function apiService($http, $resource, $translate, CONFIG_API)
{
// change header with good language
$http.defaults.headers.common["Accept-Language"] = $translate.proposedLanguage();
var api = {};
// Base Url
api.baseUrl = CONFIG_API.base_url;
// request to reload when user changes language
api.Documents = $resource(api.baseUrl + 'documents/:id',
{id: '@id'},
{update: {method: 'PUT'}}
);
...
}
在 translateChangeSuccess
事件中使用所需语言的当前参数再次请求(暗示服务器会根据语言向您发送不同的内容)
我不能给你一个具体的例子,因为有很多方法可以管理它。
用一些代码你可以有更好的解释。
好的,所以我找到了如何做到这一点。我只是通过 service (apiResolver)
再次向 api 请求数据test.module.js :
(function ()
{
'use strict';
angular
.module('app.test_module', [])
.config(config);
/** @ngInject */
function config($stateProvider, msApiProvider)
{
// State
$stateProvider.state('app.test_module', {
url : '/myurl',
views : {
'content@app': {
templateUrl: 'mytemplate.html',
controller : 'MyController as vm'
}
},
resolve : {
test : function (apiResolver)
{
return apiResolver.resolve('myquery@query');
}
}
});
}
})();
和test.controller.js:
(function ()
{
'use strict';
angular
.module('app.test_module')
.controller('testController', testController);
/** @ngInject */
function testController($rootScope, apiResolver, dataToDisplay)
{
var vm = this;
// Data
vm.dataToDisplay = dataToDisplay;
$rootScope.$on('$translateChangeSuccess', function () {
// reload my content
apiResolver.resolve('myquery@query')
.then(function(result) {
vm.dataToDisplay = result;
});
});
}
// more code here but not usefull in this example
})();
也许有更好的方法但它有效,当用户更改语言时我的数据会被翻译 :)