Angular工厂和过滤器$http
Angular Factories and Filters $http
我正在使用AngularJS,并创建了一个模块,它有一个工厂和一个过滤器。工厂获取本地json文件翻译),过滤器提供了一个返回文本翻译版本的函数。因此,代码如下所示;
angular
.module('i18n', [])
.factory('translationDataFact', ['$http', function($http){
var t = {};
var user = {};
t.defaultLanguage = 'en-GB';
t.languageFile = null;
t.init = function(){
t.setLanguage();
if(!t.languageFile){
$http
.get('translations/' + t.defaultLanguage + '.json')
.success(function(data){
t.languageFile = data.strings;
})
.error(function(error){
console.log(error);
});
}
}
t.setLanguage = function(){
/* change default language to User language here */
if(user.id){
t.defaultLanguage = user.language;
}
return t.defaultLanguage;
}
t.init();
return t.languageFile;
}])
.filter('t', ['translationDataFact', function (translationDataFact) {
var translate = function (stringIdenitfier) {
var translation = translationDataFact.languageFile[stringIdenitfier];
if(translation){
return translation;
}
return "translate me!!";
};
return translate(stringIdenitfier);
}]);
然后我希望使用过滤器来翻译像这样的变量和名称
{{"string" | t }}
我遇到的问题是我不知道如何确保
- Factory的返回是在Filter运行此操作之前设置的
- 此外,我对如何在这个过滤器准备好之前阻止整个应用程序渲染感到困惑
任何帮助都将是惊人的,因为我迷路了:(
您为什么不使用现有的angularjs翻译库(如angular translate)?
-
在工厂中,方法u需要返回Service本身,而不是操作的结果。(我不确定你到底想从这个服务中得到什么)
-
当您返回t.language时,它始终为null,并且在您的筛选器中保持为null。。。因为您的http调用是异步的。
-
我会这样做:
app.module('translationDataFact',['$resource',function($resource){
var t={}
t.init=函数(){t.result=$resource("…")
}
t.init()
返回t;}]);
在控制器中,您有:$scope.language=translationDataFact.result;
您可以使用参数制作过滤器,在过滤器内部您可以检查语言是否未定义。所以稍后你会写:
{{ "string" | t:language}
在语言"到达"之后,你会看到翻译。
回答您的问题:
-
你的工厂应该退回一些可以要求具体翻译的东西。如果翻译还没有准备好,只需返回一些基本的东西,比如空字符串或
null
。例如return translations.t(languageFile, translationKey);
其中
t()
将是一个检查translations
的内部数据结构的函数,并且如果尚未加载翻译,则可以返回翻译的结果或前面提到的值。 -
您可以在顶级元素上执行类似
ng-show="translations.isLoaded()"
的操作,但您需要在最高级别控制器的$scope
上设置对translations
服务的引用。您可能希望在$rootScope
上执行此操作,以便您的翻译服务在控制器中也始终可用。
- Meteor如何接收HTTP请求
- 为什么我的d3.jsselectAll+过滤器没有过滤
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 在我的情况下,如何进行http请求
- Angular-表的多列过滤器
- //而不是在src=“”上使用http://"属性
- 我无法使用angularJs($http)访问服务器
- 如何“;过滤器”;或者以其他方式重构该数据
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 角度异步http自动完成
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 角度http服务器页面刷新404s
- Angularjs通过过滤器获取indexOf
- http.listen()在运行时接受终端命令
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- Angular工厂和过滤器$http
- Angularjs过滤器基于http get
- 在angular中使用HTTP请求的过滤器函数
- 带$http response的Angular过滤器