等到我的 FormlyFieldConfig 完成加载
Wait until my FormlyFieldConfig has finished loading
我 运行 遇到一个问题,我试图在 UI 元素完全加载之前使用它们,导致未定义的异常。
表单加载到组件构造函数中,然后我调用 initializeElements 方法来处理 UI 元素。但是,正如我所提到的,我得到了 null 和未定义的异常,因为我怀疑当我去获取对象时 loadForms() 方法没有完全完成。
我是 angular 的新手,所以我不确定在表单完全加载之前我可以在这里对 'wait' 做什么。我已经尝试将这些方法放在几个不同的生命周期挂钩中,但没有取得任何成功。
我有我的组件:
export class UIComponent implements OnInit{
form = new FormGroup({});
model = {};
fields: FormlyFieldConfig[];
constructor(){
this.fields = loadForm();
this.initializeElements();
};
ngOnInit(){
};
initializeElements(){
var overrides = this.form.get('Overrides'); // this is null on page load
var firstNameObj = overrides.get('First Name'); // also null on page load
};
}
我的组件模板:
<form fxLayoutAlign="center center" [formGroup]="form">
<formly-form [form]= "form" [fields]="fields" [model]="model"></formly-form>
</form>
方法 loadForms:
export function loadForms(){
return [
{
'key': 'Overrides',
'fieldGroup': [{
'fieldGroupClassName': 'display-flex',
'fieldGroup': [{
'key': 'First Name',
'type': 'input',
'value': 'New First Name',
'templateOptions':{
'label': 'First Name: '
}
},
'key': 'Last Name',
'type': 'input',
'value': 'New Last Name',
'templateOptions':{
'label': 'Last Name: '
}
}]
}]
}
]
}
查看生命周期:https://angular.io/guide/lifecycle-hooks
如果您在 constructor()
方法中使用 loadForms()
,它不会等待视图加载。为此,如果您想确保您的视图完成加载,请使用 ngAfterViewInit()
.
如果可能的话,请不要在构造函数上加载数据或调用方法,请根据需要使用 ngOnInit
、ngAfterViewInit()
或上面文档中列出的任何生命周期挂钩.
我不知道你是否使用过它们,如果你尝试使用 ngAfterViewInit()
但它不起作用,请尝试在你的 <form>
标签上设置 *ngIf=fields
希望对您有所帮助。
您可以创建一个可观察对象
export class UIComponent implements OnInit{
form = new FormGroup({});
model = {};
overrides: any;
firstNameObj: string = '';
fields: FormlyFieldConfig[];
constructor(){
};
ngOnInit(){
loadForm().subscribe(
response => {
this.fields = response;
this.initializeElements();
}
};
initializeElements(){
overrides = this.form.get('Overrides'); // this is null on page load
firstNameObj = overrides.get('First Name'); // also null on page load
};
}
那么您的导出函数将与此类似。我假设这是在它自己的文件中,所以这应该是怎样的可能会有一点差异。但是如果要将其从函数更改为 http 服务调用,则可观察值应保持不变。
export function loadForms (): Observable<any> => {
return new Observable<any>(observer =>{
observer.next([
{
'key': 'Overrides',
'fieldGroup': [{
'fieldGroupClassName': 'display-flex',
'fieldGroup': [{
'key': 'First Name',
'type': 'input',
'value': 'New First Name',
'templateOptions':{
'label': 'First Name: '
}
},
{
'key': 'Last Name',
'type': 'input',
'value': 'New Last Name',
'templateOptions':{
'label': 'Last Name: '
}
}]
}]
}
]);
}
我 运行 遇到一个问题,我试图在 UI 元素完全加载之前使用它们,导致未定义的异常。
表单加载到组件构造函数中,然后我调用 initializeElements 方法来处理 UI 元素。但是,正如我所提到的,我得到了 null 和未定义的异常,因为我怀疑当我去获取对象时 loadForms() 方法没有完全完成。
我是 angular 的新手,所以我不确定在表单完全加载之前我可以在这里对 'wait' 做什么。我已经尝试将这些方法放在几个不同的生命周期挂钩中,但没有取得任何成功。
我有我的组件:
export class UIComponent implements OnInit{
form = new FormGroup({});
model = {};
fields: FormlyFieldConfig[];
constructor(){
this.fields = loadForm();
this.initializeElements();
};
ngOnInit(){
};
initializeElements(){
var overrides = this.form.get('Overrides'); // this is null on page load
var firstNameObj = overrides.get('First Name'); // also null on page load
};
}
我的组件模板:
<form fxLayoutAlign="center center" [formGroup]="form">
<formly-form [form]= "form" [fields]="fields" [model]="model"></formly-form>
</form>
方法 loadForms:
export function loadForms(){
return [
{
'key': 'Overrides',
'fieldGroup': [{
'fieldGroupClassName': 'display-flex',
'fieldGroup': [{
'key': 'First Name',
'type': 'input',
'value': 'New First Name',
'templateOptions':{
'label': 'First Name: '
}
},
'key': 'Last Name',
'type': 'input',
'value': 'New Last Name',
'templateOptions':{
'label': 'Last Name: '
}
}]
}]
}
]
}
查看生命周期:https://angular.io/guide/lifecycle-hooks
如果您在 constructor()
方法中使用 loadForms()
,它不会等待视图加载。为此,如果您想确保您的视图完成加载,请使用 ngAfterViewInit()
.
如果可能的话,请不要在构造函数上加载数据或调用方法,请根据需要使用 ngOnInit
、ngAfterViewInit()
或上面文档中列出的任何生命周期挂钩.
我不知道你是否使用过它们,如果你尝试使用 ngAfterViewInit()
但它不起作用,请尝试在你的 <form>
标签上设置 *ngIf=fields
希望对您有所帮助。
您可以创建一个可观察对象
export class UIComponent implements OnInit{
form = new FormGroup({});
model = {};
overrides: any;
firstNameObj: string = '';
fields: FormlyFieldConfig[];
constructor(){
};
ngOnInit(){
loadForm().subscribe(
response => {
this.fields = response;
this.initializeElements();
}
};
initializeElements(){
overrides = this.form.get('Overrides'); // this is null on page load
firstNameObj = overrides.get('First Name'); // also null on page load
};
}
那么您的导出函数将与此类似。我假设这是在它自己的文件中,所以这应该是怎样的可能会有一点差异。但是如果要将其从函数更改为 http 服务调用,则可观察值应保持不变。
export function loadForms (): Observable<any> => {
return new Observable<any>(observer =>{
observer.next([
{
'key': 'Overrides',
'fieldGroup': [{
'fieldGroupClassName': 'display-flex',
'fieldGroup': [{
'key': 'First Name',
'type': 'input',
'value': 'New First Name',
'templateOptions':{
'label': 'First Name: '
}
},
{
'key': 'Last Name',
'type': 'input',
'value': 'New Last Name',
'templateOptions':{
'label': 'Last Name: '
}
}]
}]
}
]);
}