代码之家  ›  专栏  ›  技术社区  ›  Tom

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

  •  1
  • Tom  · 技术社区  · 6 年前

    我正在使用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 回复  |  直到 6 年前
        1
  •  2
  •   Muhammed Albarmavi    6 年前

    简单地说,不要试图混合访问静态属性,比如使用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 });
        }
    
    }
    

    您可以在AppComponent构造函数上设置translation属性

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

    更新

    @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 向提供者列表并注入 到任何组件以获得即时的 图表帮助服务 .

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