0

編輯: 我想基本上擴展所提供的管NGX-翻譯,如下:如何創建新的NGX-翻譯管(純VS不純)

import { Pipe, PipeTransform } from '@angular/core'; 
import { TranslatePipe } from "@ngx-translate/core"; 

@Pipe({ 
    name: 'msg' 
}) 

export class MsgPipe extends TranslatePipe implements PipeTransform { 
    transform(value: any, args: any[]): any { 
    return super.transform(value, args) 
    } 
} 

只有純粹當設置爲這個工程假,所以我認爲ngx-translate的加載器還沒有準備好。 有沒有檢查?這樣我可以保持管道的純淨和工作。

原帖(無關):

我已經創建了一個簡單的調用translateService.instant並返回結果的管道。

@Pipe({ 
    name: 'msg', 
    pure: false 
}) 
export class MsgPipe implements PipeTransform { 

    constructor(private translateService: TranslateService) {} 

    transform(value: any, args: any[]): any { 
    console.log('checked. val = ', value) 
    return this.translateService.instant(value, args); 
    } 
} 

沒有將此標記爲純粹:false,管道只返回值。它有它(因爲我認爲文件加載器已完成)。

我的問題是,每個管道被調用約8次,我可以做任何改變檢測告訴管道停止檢查一旦檢索到一個值?

+0

只是一個簡單的問題:爲什麼你會需要一個管道來管理翻譯?它看起來並不實際,甚至更不潔淨。我相信他們使用純粹的管道來管理更新? 您可以嘗試更改使用管道組件的檢測策略,但維護管道是非常不切實際的...... –

+0

ngx-translate提供了管道,我想基本上擴展它,詳見我的編輯 –

+0

更新的問題在這裏:https://stackoverflow.com/questions/46431752/how-to-extend-ngx-translate-pipe –

回答

2

多次觸發的問題是您需要純管道的原因,因爲只有當輸入參考更改(1)時纔會再次觸發。翻譯服務瞬間的問題是,當你嘗試加載某些內容時,翻譯可能還沒有完成,所以純管道不會幫助你。

對於ngx-translate,有一個管道已經可以使用,即翻譯管道(2)。

據我所知,你不能對管道做任何事情,使它不再重新評估自己。爲此,您可能需要將組件設置爲OnPush,以便在其中一個輸入發生更改時僅更新自身。

(1)https://angular.io/guide/pipes#pure-and-impure-pipes

(2)https://github.com/ngx-translate/core/blob/master/src/translate.pipe.ts

+1

我試圖擴展管道,主要是因爲它將用作常量查找常規字符串。我沒有試圖擴展它,聽起來像我應該重溫。我會讓你知道 –

+0

我試過簡單地擴展由ngx-translate提供的管道,但它只能用於不純的管道。看來超級類有不純的設置爲false,但他們在內部管理變更檢測 –

+0

在這裏更新的問題https://stackoverflow.com/questions/46431752/how-to-extend-ngx-translate-pipe –