ng2-translate 指令:为什么 renderer.setText 不起作用?
ng2-translate directive: why does renderer.setText not work?
我写了以下指令,因为显然 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 不包含代码是否有充分的理由?坏主意?
这似乎是@angular 2.2.0 中的重大更改。我刚刚从 2.1.0 升级后遇到了同样的问题。渲染器 class 被列为实验性的,所以我想我们可以预期会有一些不稳定:( https://angular.io/docs/js/latest/api/core/index/Renderer-class.html
Renderer.setText
was never meant to be used for elements, only for text nodes.
以及该评论的更多内容:
To do this, just use elementRef.nativeElement.textContent = ...
directly.
我写了以下指令,因为显然 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 不包含代码是否有充分的理由?坏主意?
这似乎是@angular 2.2.0 中的重大更改。我刚刚从 2.1.0 升级后遇到了同样的问题。渲染器 class 被列为实验性的,所以我想我们可以预期会有一些不稳定:( https://angular.io/docs/js/latest/api/core/index/Renderer-class.html
Renderer.setText
was never meant to be used for elements, only for text nodes.
以及该评论的更多内容:
To do this, just use
elementRef.nativeElement.textContent = ...
directly.