【发布时间】:2019-03-25 00:31:50
【问题描述】:
我正在使用来自 material.angular.io 的 Angular 6 和 Material CSS
我正在尝试创建将提供翻译的指令。
<span translate>page.login.btnsubmit</span>
标签内的文本正在翻译,工作正常。
翻译属性占位符
以下工作正常
<input type="text" translate="placeholder" placeholder="newworld">
以下不工作
<input type="text" matInput placeholder="Username / Email / Mobile" value="" translate="placeholder">
由于输入 matInput 属性,没有取更新值。
我可以更新 matInput 属性的可能性有哪些。我在指令上使用的动作钩子是 ngAfterViewInit
谢谢。
编辑 1 - 翻译指令 TS
import { Directive, ElementRef, Input } from '@angular/core';
import * as _ from 'lodash';
import { TranslateService } from '../services/translate.service';
@Directive({
selector: '[translate]'
})
export class TranslateDirective {
@Input('translate') referrer:string;
constructor(private el: ElementRef, private ts: TranslateService) {
}
ngAfterViewInit() {
if(_.isEmpty(this.referrer)){ // executed for text between the tags example: <span translate>page.login.username</span>
this.translateInnerHtml()
}else{ // executed for attributes
this.translateAttribute();
}
return;
}
translateAttribute(){ // Not updating
this.el.nativeElement.attributes.placeholder.value="dynamic placeholder";
}
translateInnerHtml(){ // Working fine as expected
const innerHtml = this.el.nativeElement.innerHTML;
if (_.isEmpty(innerHtml)) {
this.el.nativeElement.innerHTML = 'No text provided for translation';
return;
}
this.getTranslationText(innerHtml)
}
getTranslationText(text){
let splitText = _.split(text, '.');
let key = _.join(splitText.slice(-1));
let file = _.join(splitText.slice(-2, -1));
let folder = _.join(splitText.slice(0, splitText.length - 2), '/');
if (_.isEmpty(key) || _.isEmpty(file) || _.isEmpty(folder)) {
this.el.nativeElement.innerHTML = 'No text provided for translation';
return;
}
this.ts.get(folder, file).subscribe(
(data) => {
if (_.isEmpty(data) || _.isEmpty(data[key])) {
this.el.nativeElement.innerHTML = 'No text provided for translation';
return;
}
this.el.nativeElement.innerHTML = data[key];
}
)
}
}
【问题讨论】:
-
try [placeholder]=" ' ....' " (我在引号之间放置了空格以便于阅读,但您必须删除。
-
我添加了 stackblitz 代码。请检查一下。
标签: angular