ng2-translate指令:为什么renderer.setText不起作用?

ng2-translate指令:为什么renderer.setText不起作用?

问题描述:

我写了下面的指令,因为显然ng2-translate缺少一个:ng2-translate指令:为什么renderer.setText不起作用?

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不包括?馊主意?

Renderer.setText was never meant to be used for elements, only for text nodes.

,并从该评论更多:

要做到这一点,只需使用elementRef.nativeElement.textContent = ... 直接。

这似乎是@angular 2.2.0中的一个重大改变。我刚刚从2.1.0升级后遇到同样的问题。渲染器类被列为实验,所以我想我们可以期待一些不稳定:(https://angular.io/docs/js/latest/api/core/index/Renderer-class.html