DevExtreme组件提供的大多数事件方法都会传入一个事件对象,该事件对象将事件触发组件作为子对象。然后,在处理事件方法中,我可以仅使用event参数中的组件,而不必使用@ViewChild机制引用该组件。在大多数情况下,这很完美。但是-如果我使用DxForm创建表单组件dynamicall并将以下对象提供给DxForm的items参数,它将不再起作用:
[{
dataField: 'postingText',
editorType: 'dxAutocomplete',
editorOptions: {
dataSource: this._listService.PostingTextDataSource,
onValueChanged: (changedValue) => this.autocompleteChanged(changedValue)
}
}]
将调用我的事件处理方法autocompleteChanged,并获得事件对象。事件对象还有一个子组件。但是这个组件对象以某种方式被破坏了:
如您所见,组件对象没有有用的属性。而且大多数属性都以下划线开头(它们是某种私有/受保护的吗?)。
我怎么了?真的不可能如此简单地获得组件吗?
答案 0 :(得分:1)
您是对的,表单编辑器未在其事件处理程序中提供表单组件。它们仅提供有关自身的信息(您也可以检查 element 参数-它是编辑器的元素,而不是Form的元素)。
因此,在您的情况下,component参数是Autocomplete的实例,因此您必须使用ViewChild装饰器。
或者,您可以从onInitialized事件处理程序中获取表单的实例。
他们在Angular Components - Call Methods主题中有代码段。