Javascript 自定义过滤器中的角度平移问题
我正在尝试创建一个过滤器,用于在angular js中显示经过的日期和时间,并且运行良好。现在我尝试向它添加翻译,但那一次它显示的是键而不是值。我认为问题在于,在执行筛选器时没有加载翻译 我试着翻译代码,就像Javascript 自定义过滤器中的角度平移问题,javascript,angularjs,Javascript,Angularjs,我正在尝试创建一个过滤器,用于在angular js中显示经过的日期和时间,并且运行良好。现在我尝试向它添加翻译,但那一次它显示的是键而不是值。我认为问题在于,在执行筛选器时没有加载翻译 我试着翻译代码,就像 if(hours){ result+= " "+hours+$translate.instant("elapsedFull.hours"); } if(minutes){
if(hours){
result+= " "+hours+$translate.instant("elapsedFull.hours");
}
if(minutes){
result+= " "+minutes+$translate.instant("elapsedFull.minutes");
}
if(seconds){
result+= " "+seconds+$translate.instant("elapsedFull.seconds");
}
请检查plunker链接,让我知道如何解决此问题
您的过滤器应该是如下所示的有状态过滤器:
var elapsedFull = function($translate,$timeout){
function myFilter(date){
var duration = Date.now() - date;
var seconds = (duration / 1000) | 0;
duration -= duration * 1000;
var minutes = (seconds / 60) | 0;
seconds -= minutes * 60
var hours = (minutes / 60) | 0;
minutes -= hours * 60;
var days = (hours / 24) | 0;
hours -= days * 24;
var result="";
if(days){
result = days+"d";
}
if(hours){
result+= " "+hours+$translate.instant("elapsedFull.hours");
}
if(minutes){
result+= " "+minutes+$translate.instant("elapsedFull.minutes");
}
if(seconds){
result+= " "+seconds+$translate.instant("elapsedFull.seconds");
}
return result;
}
myFilter.$stateful = true;
return myFilter;
}
AngularJS假设如果给定相同的参数,则filter函数返回相同的结果。因此,它缓存过滤结果以避免调用过滤器。那么,如果您想要异步计算过滤器的结果呢?筛选器无法返回承诺,它必须返回某个值,至少是未定义的值。它所能希望的最好方法是在将来重新计算该值并返回其他值。此类筛选器称为有状态筛选器,它们要求在返回的函数中将属性
$stateful
设置为true
。您的筛选器应该是有状态筛选器,如下所示:
var elapsedFull = function($translate,$timeout){
function myFilter(date){
var duration = Date.now() - date;
var seconds = (duration / 1000) | 0;
duration -= duration * 1000;
var minutes = (seconds / 60) | 0;
seconds -= minutes * 60
var hours = (minutes / 60) | 0;
minutes -= hours * 60;
var days = (hours / 24) | 0;
hours -= days * 24;
var result="";
if(days){
result = days+"d";
}
if(hours){
result+= " "+hours+$translate.instant("elapsedFull.hours");
}
if(minutes){
result+= " "+minutes+$translate.instant("elapsedFull.minutes");
}
if(seconds){
result+= " "+seconds+$translate.instant("elapsedFull.seconds");
}
return result;
}
myFilter.$stateful = true;
return myFilter;
}
AngularJS假设如果给定相同的参数,则filter函数返回相同的结果。因此,它缓存过滤结果以避免调用过滤器。那么,如果您想要异步计算过滤器的结果呢?筛选器无法返回承诺,它必须返回某个值,至少是未定义的值。它所能希望的最好方法是在将来重新计算该值并返回其他值。这种过滤器称为有状态过滤器,它们要求在返回的函数中将属性$stateful
设置为true