将非静态对象传递给angular 4中的静态方法

将非静态对象传递给angular 4中的静态方法,angular,Angular,我正在使用angular 4应用程序,并试图将当前语言传递给toLocaleString()方法。mathoround方法是静态方法,不理解this.translation.currentLang。 如何将非静态对象传递给静态方法 import { Injectable } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; @Injectable() export class ChartH

我正在使用angular 4应用程序,并试图将当前语言传递给toLocaleString()方法。mathoround方法是静态方法,不理解this.translation.currentLang。 如何将非静态对象传递给静态方法

import { Injectable } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';

@Injectable()
export class ChartHelperService {


    constructor( private translation: TranslateService) { }

    static prepareChartTooltipRow(name: string, value: string, additionalStyle: string): string {
        return '<tr style="background-color: initial;"><td style="text-align:left;' + additionalStyle + '"><b>' + name +
            '</b></td>' +
            '<td style="text-align: right;' + additionalStyle + '">' +
            value +
            '</td></tr>';
    }

    static showCcorYAxis(id: number): boolean {
        return !(window.innerWidth < 992 && id !== 0);
    }

    static mathRound(input: number): string {
        return Math.round(input).toLocaleString(this.translation.currentLang, { maximumFractionDigits: 0 });
    }

}
从'@angular/core'导入{Injectable};
从'@ngx translate/core'导入{TranslateService};
@可注射()
导出类ChartHelperService{
构造函数(私有翻译:TranslateService){}
静态prepareChartTooltipRow(名称:string,值:string,附加样式:string):string{
返回“”+名称+
'' +
'' +
价值观+
'';
}
静态showCcorYAxis(id:number):布尔值{
返回!(window.innerWidth<992&&id!==0);
}
静态mathRound(输入:number):字符串{
返回Math.round(input.toLocalString(this.translation.currentLang,{maximumFractionDigits:0});
}
}

简单地说,不要试图混合访问静态属性,比如使用instant类

ChartHelperService作为静态类

export class ChartHelperService {

    static translation:TranslateService;

    setTranslationService( translation: TranslateService) {
        ChartHelperService.translation = translation;
    }

    static prepareChartTooltipRow(name: string, value: string, additionalStyle: string): string {
        return '<tr style="background-color: initial;"><td style="text-align:left;' + additionalStyle + '"><b>' + name +
            '</b></td>' +
            '<td style="text-align: right;' + additionalStyle + '">' +
            value +
            '</td></tr>';
    }

    static showCcorYAxis(id: number): boolean {
        return !(window.innerWidth < 992 && id !== 0);
    }

    static mathRound(input: number): string {
        return Math.round(input).toLocaleString(ChartHelperService.translation.currentLang, { maximumFractionDigits: 0 });
    }

}
实用程序类中的ChartHelperService,所以不需要将其添加到提供程序列表中

已更新

ChartHelperService作为服务

@Injectable()
export class ChartHelperService {


    constructor( private translation: TranslateService) { }

    public prepareChartTooltipRow (name: string, value: string, additionalStyle: string): string {
        return '<tr style="background-color: initial;"><td style="text-align:left;' + additionalStyle + '"><b>' + name +
            '</b></td>' +
            '<td style="text-align: right;' + additionalStyle + '">' +
            value +
            '</td></tr>';
    }

    public showCcorYAxis(id: number): boolean {
        return !(window.innerWidth < 992 && id !== 0);
    }

    public mathRound(input: number): string {
        return Math.round(input).toLocaleString(this.translation.currentLang, { maximumFractionDigits: 0 });
    }

}

真正的问题可能是——为什么首先要将其作为静态函数?但是,如果您真的想使用静态,可以尝试使用ChartHelperService.translation(而不是这个,因为您在静态函数中没有可用的类实例)。可能真正正确的方法是从调用此静态函数的组件实际传递翻译服务实例。应用程序没有appcomponent。它只有appmodule你可以在appmodule上添加构造函数并设置翻译服务它也可以@Tom
@Injectable()
export class ChartHelperService {


    constructor( private translation: TranslateService) { }

    public prepareChartTooltipRow (name: string, value: string, additionalStyle: string): string {
        return '<tr style="background-color: initial;"><td style="text-align:left;' + additionalStyle + '"><b>' + name +
            '</b></td>' +
            '<td style="text-align: right;' + additionalStyle + '">' +
            value +
            '</td></tr>';
    }

    public showCcorYAxis(id: number): boolean {
        return !(window.innerWidth < 992 && id !== 0);
    }

    public mathRound(input: number): string {
        return Math.round(input).toLocaleString(this.translation.currentLang, { maximumFractionDigits: 0 });
    }

}
export class TestComponent  {    
   constructor( private chartHelperService: ChartHelperService) {
     console.log(this.chartHelperService)
   }
 }