Javascript 自定义过滤器中的角度平移问题

Javascript 自定义过滤器中的角度平移问题,javascript,angularjs,Javascript,Angularjs,我正在尝试创建一个过滤器,用于在angular js中显示经过的日期和时间,并且运行良好。现在我尝试向它添加翻译,但那一次它显示的是键而不是值。我认为问题在于,在执行筛选器时没有加载翻译 我试着翻译代码,就像 if(hours){ result+= " "+hours+$translate.instant("elapsedFull.hours"); } if(minutes){

我正在尝试创建一个过滤器,用于在angular js中显示经过的日期和时间,并且运行良好。现在我尝试向它添加翻译,但那一次它显示的是键而不是值。我认为问题在于,在执行筛选器时没有加载翻译

我试着翻译代码,就像

 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