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