تایپاسکریپت - انگولار ۲ دریافت یک کامپوننت که یک پایپ را فراخوانی میکند


من نیاز دارم بدانم کدام مؤلفه خط لوله من را فراخوانی میکند.

من نمیخواهم کامپوننت را به عنوان آرگومان به پایپ بدهیم، مانند این {{ "textArg" | myTranslatorPipe:thisTemplate }}.

من میخواهم این {{ "textArg" | myTranslatorPipe }} را داشته باشم و همچنان به کامپوننت دسترسی داشته باشم.

export class myTranslatorPipe implements PipeTransform {
    transform(value: string): string {
        //get component here ?
    }   
}

چطور این را انجام دهم؟ پیشاپیش ممنون!

پاسخ شماره ۱

تنها راهی که پیدا کردهام برای انجام این کار، ارسال مستقیم کامپوننت به پایپ به عنوان یک پارامتر بود.

روش transform تعداد بینهایتی پارامتر را داخل args دریافت میکند، کد زیر این کار را انجام خواهد داد:

export class myTranslatorPipe implements PipeTransform {
    transform(value: string, componentRef: any): string {
        //component is stored inside the 'componentRef' 
        if (typeof componentRef === 'undefined' || componentRef === null) {
            throw Error('Missing "componentRef" parameter, correct implementation is "myTranslatorPipe: this".');
        }
        // here you can use your component reference
    }   
}

تنها نکته این است که شما باید پایپ خود را به این صورت پیادهسازی کنید {{ "textArg" | myTranslatorPipe: this}} به جای اینکه فقط {{ "textArg" | myTranslatorPipe }} بنویسید.

اعتبارسنجی اجباری نیست: typeof componentRef === 'undefined' || componentRef === null