Директива ng2-translate: почему не работает renderer.setText?
Я написал следующую директиву, потому что, по - видимому, 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 не включает его? плохая идея?
2 ответа
Renderer.setText
никогда не предназначался для использования с элементами, только для текстовых узлов.
И еще из этого комментария:
Для этого просто используйте
elementRef.nativeElement.textContent = ...
непосредственно.
Кажется, это серьезное изменение в @angular 2.2.0. Я только что столкнулся с той же проблемой после обновления с 2.1.0. Класс Renderer указан как экспериментальный, поэтому я думаю, что мы можем ожидать некоторую нестабильность:( https://angular.io/docs/js/latest/api/core/index/Renderer-class.html