3

どうやらng2-translateに欠落しているため、次のディレクティブを作成しました。

import { Directive, ElementRef, Renderer, OnDestroy } from '@angular/core';
import { TranslateService } from 'ng2-translate';
import { Subscription } from 'rxjs';

@Directive({selector: '[translate]'})
export class TranslateDirective implements OnDestroy {
    subscription: Subscription;

    constructor(el: ElementRef, renderer: Renderer, translateService: TranslateService) {
        let translateKey = el.nativeElement.attributes.translate.value;
        this.subscription = translateService.get(translateKey).subscribe(value => {
            el.nativeElement.innerHTML = value; // this works
            // renderer.setText(el.nativeElement, value); // this doesn't work for some reason?
        });
    }

    ngOnDestroy(): void {
        if (this.subscription) {
            this.subscription.unsubscribe();
        }
    }
}

ご覧のとおり、低レベルの「el.nativeElement.innerHTML」を使用して動作させましたが、API は「renderer.setText」呼び出しも動作することを暗示しているようです。代わりに、まったく効果がありません。

質問: それはなぜですか? setText 呼び出しは何をすべきですか? おまけ: コードに問題がありますか、それとも ng2-translate に含まれていない正当な理由がありますか? 悪いアイデア?

4

2 に答える 2

2

これは @angular 2.2.0 で重大な変更のようです。2.1.0 からアップグレードした後、同じ問題が発生しました。Renderer クラスは実験的なものとしてリストされているため、多少の不安定性が予想されると思います:( https://angular.io/docs/js/latest/api/core/index/Renderer-class.html

于 2016-11-29T19:30:57.010 に答える