AgGrid异步函数获取cellEditorParams参数问题求助
AG Grid异步获取cellEditorParams.values的问题解决
你当前的写法存在核心问题:AG Grid不会自动执行cellEditorParams里的异步函数并将返回值注入到编辑器参数中,所以编辑器初始化时拿到的values是个函数,而非你期望的异步请求结果,自然无法通过params.values访问到数据。
下面给两种可行的解决思路:
方法一:在自定义编辑器内部异步获取参数
直接在MyEditor组件的初始化方法里执行异步请求,拿到数据后再完成编辑器的渲染逻辑:
class MyEditor implements ICellEditorParams { private currentParams: ICellEditorParams; private options: any[] = []; init(params: ICellEditorParams) { this.currentParams = params; // 异步获取参数并更新编辑器内部状态 table.getParams(params.rowIndex).then(values => { this.options = values; // 如果是React/Vue组件,这里触发视图更新,比如React的setState // this.setState({ options: values }); }); } // 编辑器其他必要方法,比如getValue等 getValue() { // 根据你的编辑器逻辑返回选中值 return /* 选中的选项值 */; } }
方法二:提前在编辑前加载参数
利用AG Grid的processCellForEdit钩子,在进入编辑模式前就异步获取参数并存在行数据中,之后cellEditorParams直接读取已加载好的数据:
columnDefs: [ { cellEditor: MyEditor, cellEditorParams: (params) => ({ values: params.data.editorValues // 直接取提前加载好的数据 }), // 进入编辑模式前触发,异步加载参数 processCellForEdit: async (params) => { const values = await table.getParams(params.rowIndex); params.data.editorValues = values; return params.value; // 返回原单元格值,不影响编辑流程 } } ]
注意事项
- 不要直接把异步函数赋值给
cellEditorParams的字段,AG Grid只会把函数本身传递给编辑器,不会处理异步返回值。 - 如果使用框架组件(React/Vue)做编辑器,要注意异步数据加载完成后的视图更新,避免编辑器渲染时无数据可用。
内容的提问来源于stack exchange,提问作者Тина Погодина
相关产品推荐
相关产品推荐

