Для I18n-подобного компонента я хочу получить содержимое компонента как строку, чтобы иметь запасное значение, если моя служба I18n ничего не получает, это значение должно быть резервным.
Метод обслуживания I18n get
:
public get(key:string,
defaultValue?:string,
variables:Variables = {},
domain?:string):string {
for (let catalogue of this.catalogues) {
if (catalogue.getDomains().indexOf(domain) >= 0
&& catalogue.getLocale() == this.locale
&& catalogue.hasKey(key)) {
return I18n.setVariables(catalogue.get(key, domain, defaultValue).value, variables);
}
}
return defaultValue;
}
I18nComponent:
@Component({
selector: "i18n",
template: "{{text}}",
})
export class I18nComponent implements OnInit {
constructor(private i18n:I18n) {
}
@ContentChild() content:string; //Here, I want to store actual value as fallback one.
@Input('key') key:string;
@Input('domain') domain:string;
@Input('variables')
variables:Variables = [];
@Input("plural")
plural:number;
text:string;
ngOnInit():any {
console.log(this.content); //Here I get 'undefined'
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 key="FOO_KEY" domain="stackoverflow">I'm the default value !</i18n>
Я знаю, что <ng-content></ng-content>
работает, но только в логике шаблона, мне нужен способ получить дочерний элемент в виде строки в typescript.
Уже пробовал @ContentChild(String)
, но я получил undefined
.
Другим способом было бы сделать это как строку "Loading...", которую вы можете иметь в базовом компоненте app
в индексе, действуя как заполнитель, пока вы не загрузите все. Я мог бы сделать то же самое для I18n, позвольте шнурщику здесь, пока я не получу что-то из службы, чтобы заменить его, но я не знаю, как этого добиться.