【问题标题】:ng2-translate directive: why does renderer.setText not work?ng2-translate 指令:为什么 renderer.setText 不起作用?
【发布时间】:2016-11-27 22:58:51
【问题描述】:

我写了以下指令,因为显然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 angular2-directives ng2-translate


    【解决方案1】:

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

    还有更多来自该评论:

    为此,只需使用elementRef.nativeElement.textContent = ... 直接。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        • 2016-10-03
        相关资源
        最近更新 更多