以角度4

时间:2018-11-26 13:59:16

标签: angular

我正在使用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 });
    }

}

1 个答案:

答案 0 :(得分:1)

简单不要像对类即时操作那样尝试混合访问静态属性。

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 });
    }

}

,您可以在AppComponent承包商上设置translation属性

export class AppComponent  {    
  constructor( private translation: TranslateService ) {
   ChartHelperService.setTranslationService(translation);
  }
}
  

实用程序类中的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并将ChartHelperService注入任何组件以获取ChartHelperService的瞬间。

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