ngx-translate 选择器中的动态表单
ngx-translate dynamic form in selector
动态表单翻译有问题。
如何使用 ngx-translate 翻译 register.component.html 中的 [label]?
所以我的代码看起来是:
文本格式-input.component.html
<div class="form-group">
<label>{{label}}</label>
<input
[class.is-invalid]="ngControl.touched && ngControl.invalid"
type={{type}}
class="form-control"
[formControl]="ngControl.control"
placeholder={{label}}>
<div *ngIf="ngControl.control.errors?.required" class="invalid-feedback">text to translate {{label}}</div>
<div *ngIf="ngControl.control.errors?.minlength" class="invalid-feedback">{{label}} text to translate {{ngControl.control.errors.minlength['requiredLength']}} </div>
<div *ngIf="ngControl.control.errors?.maxlength" class="invalid-feedback">{{label}} text to translate {{ngControl.control.errors.maxlength['requiredLength']}} </div>
<div *ngIf="ngControl.control.errors?.isMatching" class="invalid-feedback">text to translate</div>
</div>
文本格式-input.ts
import { Component, Input, Self } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
@Component({
selector: 'app-text-form-input',
templateUrl: './text-form-input.component.html',
styleUrls: ['./text-form-input.component.css']
})
export class TextFormInputComponent implements ControlValueAccessor {
@Input() label: any;
@Input() type = 'text'
constructor(@Self() public ngControl: NgControl) {
this.ngControl.valueAccessor = this;
}
writeValue(obj: any): void {
}
registerOnChange(fn: any): void {
}
registerOnTouched(fn: any): void {
}
}
register.component.html
<div class="row justify-content-center">
<div class="col-md-4">
<form [formGroup]='registerForm' (ngSubmit)="register()" autocomplete="off">
<h1 class="text-center text-primary">{{'default.register' | translate}}</h1>
<hr>
<app-text-form-input [formControl]='registerForm.controls["email"]' [label]='"E-mail"'></app-text-form-input>
<app-text-form-input [formControl]='registerForm.controls["password"]' [label]='"Hasło"' type="password"></app-text-form-input>
<app-text-form-input [formControl]='registerForm.controls["confirmPassword"]' [label]='"Powtórz hasło"' type="password"></app-text-form-input>
<div class="form-group">
<label >{{'user.role' | translate}}</label>
<select
formControlName="role"
class="form-control">
<option *ngFor="let roles of role " [value]="roles.Role">{{roles.name}}</option>
</select>
</div>
<app-text-form-input [formControl]='registerForm.controls["firstName"]' [label]='"Imię"'></app-text-form-input>
<app-text-form-input [formControl]='registerForm.controls["lastName"]' [label]='"Nazwisko"'></app-text-form-input>
<app-date-form-input [formControl]='registerForm.controls["dateOfBirth"]' [label]='"Data urodzenia"'[maxDate]='maxDate' ></app-date-form-input>
<div class="form-group">
<label>{{'user.state' | translate}}</label>
<select
formControlName="state"
class="form-control">
<option *ngFor="let state of states">{{state.name}}</option>
</select>
</div>
<app-text-form-input [formControl]='registerForm.controls["zipCode"]' [label]='"Kod pocztowy"'></app-text-form-input>
<app-text-form-input [formControl]='registerForm.controls["city"]' [label]='"Miasto"'></app-text-form-input>
<app-text-form-input [formControl]='registerForm.controls["address"]' [label]='"Adres"'></app-text-form-input>
<div class="row" *ngIf="validationErrors.length > 0">
<ul class="text-danger">
<li *ngFor="let error of validationErrors">{{error}}</li>
</ul>
</div>
<div class="form-group text-center">
<button class="btn btn-success mr-1"
[disabled]="!registerForm.valid"
type="submit">{{'default.confirm' | translate}}</button>
<button class="btn btn-danger ml-1" (click)="cancel()">{{'default.cancel' | translate}}</button>
</div>
</form>
<p>Form value {{registerForm.value | json}}</p>
<p>Form status {{registerForm.status | json}}</p>
</div>
</div>
所以我想翻译我的 JSON 文件中的每个 [标签]。
当我尝试将翻译绑定到标签时,我得到了
Parser Error: Got interpolation ({{}}) where expression was expected at column 0 in [{{}}]
如果我使用 ex 添加到段落,翻译工作正常。 {{'user.firstName' |翻译}}
您可以尝试在 text-form-input.ts 中添加以下代码
也许这不是最佳解决方案,但应该可行。
ngOnInit(): void {
this.translateService.get('user.' + this.label).subscribe((data:any)=> {
this.label = data
this.label = JSON.parse(JSON.stringify(this.label))
});
}
动态表单翻译有问题。 如何使用 ngx-translate 翻译 register.component.html 中的 [label]?
所以我的代码看起来是:
文本格式-input.component.html
<div class="form-group">
<label>{{label}}</label>
<input
[class.is-invalid]="ngControl.touched && ngControl.invalid"
type={{type}}
class="form-control"
[formControl]="ngControl.control"
placeholder={{label}}>
<div *ngIf="ngControl.control.errors?.required" class="invalid-feedback">text to translate {{label}}</div>
<div *ngIf="ngControl.control.errors?.minlength" class="invalid-feedback">{{label}} text to translate {{ngControl.control.errors.minlength['requiredLength']}} </div>
<div *ngIf="ngControl.control.errors?.maxlength" class="invalid-feedback">{{label}} text to translate {{ngControl.control.errors.maxlength['requiredLength']}} </div>
<div *ngIf="ngControl.control.errors?.isMatching" class="invalid-feedback">text to translate</div>
</div>
文本格式-input.ts
import { Component, Input, Self } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
@Component({
selector: 'app-text-form-input',
templateUrl: './text-form-input.component.html',
styleUrls: ['./text-form-input.component.css']
})
export class TextFormInputComponent implements ControlValueAccessor {
@Input() label: any;
@Input() type = 'text'
constructor(@Self() public ngControl: NgControl) {
this.ngControl.valueAccessor = this;
}
writeValue(obj: any): void {
}
registerOnChange(fn: any): void {
}
registerOnTouched(fn: any): void {
}
}
register.component.html
<div class="row justify-content-center">
<div class="col-md-4">
<form [formGroup]='registerForm' (ngSubmit)="register()" autocomplete="off">
<h1 class="text-center text-primary">{{'default.register' | translate}}</h1>
<hr>
<app-text-form-input [formControl]='registerForm.controls["email"]' [label]='"E-mail"'></app-text-form-input>
<app-text-form-input [formControl]='registerForm.controls["password"]' [label]='"Hasło"' type="password"></app-text-form-input>
<app-text-form-input [formControl]='registerForm.controls["confirmPassword"]' [label]='"Powtórz hasło"' type="password"></app-text-form-input>
<div class="form-group">
<label >{{'user.role' | translate}}</label>
<select
formControlName="role"
class="form-control">
<option *ngFor="let roles of role " [value]="roles.Role">{{roles.name}}</option>
</select>
</div>
<app-text-form-input [formControl]='registerForm.controls["firstName"]' [label]='"Imię"'></app-text-form-input>
<app-text-form-input [formControl]='registerForm.controls["lastName"]' [label]='"Nazwisko"'></app-text-form-input>
<app-date-form-input [formControl]='registerForm.controls["dateOfBirth"]' [label]='"Data urodzenia"'[maxDate]='maxDate' ></app-date-form-input>
<div class="form-group">
<label>{{'user.state' | translate}}</label>
<select
formControlName="state"
class="form-control">
<option *ngFor="let state of states">{{state.name}}</option>
</select>
</div>
<app-text-form-input [formControl]='registerForm.controls["zipCode"]' [label]='"Kod pocztowy"'></app-text-form-input>
<app-text-form-input [formControl]='registerForm.controls["city"]' [label]='"Miasto"'></app-text-form-input>
<app-text-form-input [formControl]='registerForm.controls["address"]' [label]='"Adres"'></app-text-form-input>
<div class="row" *ngIf="validationErrors.length > 0">
<ul class="text-danger">
<li *ngFor="let error of validationErrors">{{error}}</li>
</ul>
</div>
<div class="form-group text-center">
<button class="btn btn-success mr-1"
[disabled]="!registerForm.valid"
type="submit">{{'default.confirm' | translate}}</button>
<button class="btn btn-danger ml-1" (click)="cancel()">{{'default.cancel' | translate}}</button>
</div>
</form>
<p>Form value {{registerForm.value | json}}</p>
<p>Form status {{registerForm.status | json}}</p>
</div>
</div>
所以我想翻译我的 JSON 文件中的每个 [标签]。 当我尝试将翻译绑定到标签时,我得到了
Parser Error: Got interpolation ({{}}) where expression was expected at column 0 in [{{}}]
如果我使用 ex 添加到段落,翻译工作正常。 {{'user.firstName' |翻译}}
您可以尝试在 text-form-input.ts 中添加以下代码 也许这不是最佳解决方案,但应该可行。
ngOnInit(): void {
this.translateService.get('user.' + this.label).subscribe((data:any)=> {
this.label = data
this.label = JSON.parse(JSON.stringify(this.label))
});
}