У меня есть Angular-компонент, обертывающий «асинхронный канал» для выполнения некоторого запроса к REST API. Мой компонент отображает значение в соответствии с заданными параметрами.
Один из входных данных моего компонента может быть изменен.
Когда значение ввода изменяется, мой компонент может получить новое значение и справиться с ним. Но отображаемое значение не обновляется в соответствии с новым вводом.
Не могли бы вы помочь мне выяснить, что я делаю не так?
@Component({
selector:'app-mycomponent',
template: `
<div>This is my Component
<div style="text-align:center">
<button (click)="changeValue(1)">ENGLISH</button>
<button (click)="changeValue(2)">FRANCAIS</button>
</div>
<dl>
<dt>
Current value is:
</dt>
<dd>{{_currentValue}}</dd>
<dt>
Child value is:
</dt>
<dd><app-codereader name='customCode' value={{_currentValue}} [languageIsoCode]='languageIsoCode'></app-codereader></dd>
</dl>
</div>`
})
export class MyComponent {
private _currentValue = 1;
changeValue(newValue:numeric) {
this._currentValue = newValue;
}
get languageIsoCode() {
if (1 == this._currentValue) {
return 'en';
} else if (2 == this._currentValue) {
return 'fr';
}
return undefined;
}
}
@Component({
selector: 'app-codereader',
template: '<span>{{ observableRefData | async }}</span>'
})
export class CodeReaderComponent implements OnInit, OnChanges {
@Input() name: string;
@Input() value: any;
@Input() languageIsoCode: string;
observableRefData$: Observable<string>;
constructor(private dataService: DataService) {}
ngOnInit() {
this.loadData();
}
ngOnChanges(changes: SimpleChanges) {
if (this.observableRefData$ && changes.languageIsoCode && changes.languageIsoCode.currentValue) {
this.observableRefData$.subscribe(data => {
console.log('Lang has changed:', changes.languageIsoCode.currentValue);
this.languageIsoCode = changes.languageIsoCode.currentValue;
this.loadData;
});
}
}
loadData(){
if (this.value && this.name && this.languageIsoCode) {
console.log('Reload data', this.value, this.name, this.languageIsoCode);
switch (this.name) {
case 'customCode':
this.observableRefData$ = this.dataService.searchForCategoryCode(this.value, this.languageIsoCode);
break;
default:
//this.observableRefData$ = this.dataService.searchForXXX(this.name, this.code, this.languageIsoCode);
break;
}
}
}
}
Вот вам план, который поможет вам понять, что я имею в виду:
редактор / Код для вставки
Вы увидите, что каждый раз, когда вы нажимаете кнопку «язык», значение меняется, но отображаемая метка (которая обрабатывается моим компонентом) никогда не меняется. Я бы хотел, чтобы observableRefData
менялся.
Обратите внимание, что кнопка для переключения языков предназначена только для примера. Не предлагайте ngx-translate, это не то, что я ищу.