Директива 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

Другие вопросы по тегам