Ответ 1
Вы не можете использовать @ContentChildren()
, чтобы получить весь контент. Вы можете либо добавить переменную шаблона, либо запрос для его имени:
< i18n key = "FOO_KEY" domain = "stackoverflow" > < span # myVar > Я значение по умолчанию! </span> </i18n>
Код>
@ContentChild ('myVar') myVar;
ngAfterContentInit() { console.log(this.myVar.nativeElement.innerHTML);
}
Код>
myVar
не будет инициализирован до вызова ngAfterContentInit()
.
В качестве альтернативы @ContentChild()
(или @ContentChildren()
) вы можете запросить тип компонента, например
< i18n key = "FOO_KEY" domain = "stackoverflow" > < my-comp > Я значение по умолчанию! </my- Comp > </i18n>
@ContentChild (MyComponent, {read: ElementRef}) mycomp;
ngAfterContentInit() { console.log(this.myVar.nativeElement.innerHTML);
}
Код>
Я думаю, что этот подход будет работать лучше, если вы подходите к
@Component ({ селектор: "i18n", template: "< div #wrapper hidden =" true "> < n-content > </ng-content > <div> {{text}}",
})
класс экспорта I18nComponent реализует OnInit {
конструктор (private i18n: I18n) { }
Содержимое @ViewChild ('wrapper'): ElementRef;//Здесь я хочу сохранить фактическое значение как резервное.
@Input ( "ключ" ): строка;
@Input ('domain') domain: string;
@Input ( 'переменные') переменные: Variables = [];
@Input ( "множественное число" ) множественное число: число;
текст: строка;
ngAfterViewInitInit(): any { console.log(this.content.nativeElement.innerHTML); if (this.plural! == undefined && this.plural!= null) { this.text = this.i18n.get(this.key, this.content, this.variables, this.domain); } else { this.text = this.i18n.getPlural(this.key, this.plural, this.content, this.variables, this.domain); } }
}
Код>
Если вы хотите, чтобы пользователь вашего компонента i18n
мог использовать угловые привязки, компоненты и директивы, в содержимом, которое они передают в <i18n>
то ему нужно обернуть его в шаблон.
< i18n key = "FOO_KEY" domain = "stackoverflow" > < & шаблон GT; Я {{someName}}! < my-comp (click) = "doSomething()" > </my-comp > </шаблон > </i18n>
Код>
как описано в fooobar.com/info/28853/...