You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UI-grid传递row.entity与col.field至函数时遇Undefined错误求助

UI-Grid按钮禁用判断参数传递异常问题解决

问题背景

需要通过row.entity和col.field判断UI-Grid中按钮是否禁用,现有代码如下:

CellTemplate代码

cellTemplate:
'<div *ngIf="{{COL_FIELD}}"> '+ 
    '<div class="ui-grid-cell-contents" > {{COL_FIELD}}' +
       '<button  uib-tooltip="Modifica" tooltip-placement="auto" ng-disabled="grid.appScope.modificaDisabled(row.entity, col.field)"'+ 
           'rel= "{{row.entity}}" rol="{{col.field}}" '+ 
           'class="btn btn-xs btn-primary stretto" style="float:right;" edit>'+ 
           '<i class="fa fa-pencil fa-fw"></i>'+ 
       '</button>'+ 
    '</div>'+ 
'</div>'

调用的函数代码

var modificaDisabled = function(riga, col){
    console.log(riga)
    console.log(col)
    // 禁用逻辑
}

异常现象

调用grid.appScope.modificaDisabled(row.entity, col.field)时,第二个参数col.field为undefined;调换参数顺序为(col.field, row.entity)后,col.field正常,但row.entity变为undefined,调整逗号前后空格无法解决。

解决方案

方案一:将参数包装为对象传递

修改按钮的ng-disabled属性,把两个参数封装成一个对象:

ng-disabled="grid.appScope.modificaDisabled({rowData: row.entity, colField: col.field})"

同时调整函数接收参数的方式:

var modificaDisabled = function(params){
    console.log(params.rowData); // 对应原row.entity
    console.log(params.colField); // 对应原col.field
    // 禁用逻辑
}

方案二:通过ng-init提前绑定变量

在cell模板的父容器中,用ng-init将row.entity和col.field绑定到当前作用域的变量,再传递给函数:

cellTemplate:
'<div *ngIf="{{COL_FIELD}}" ng-init="rowEntity = row.entity; colField = col.field"> '+ 
    '<div class="ui-grid-cell-contents" > {{COL_FIELD}}' +
       '<button  uib-tooltip="Modifica" tooltip-placement="auto" ng-disabled="grid.appScope.modificaDisabled(rowEntity, colField)"'+ 
           'rel= "{{row.entity}}" rol="{{col.field}}" '+ 
           'class="btn btn-xs btn-primary stretto" style="float:right;" edit>'+ 
           '<i class="fa fa-pencil fa-fw"></i>'+ 
       '</button>'+ 
    '</div>'+ 
'</div>'

函数无需修改,保持原参数接收方式即可。

原因分析

UI-Grid的cell模板作用域中,直接在ng-disabled的表达式里同时传递两个来自不同上下文的属性时,存在表达式解析优先级或作用域绑定的冲突,导致其中一个参数无法正确获取值。通过包装对象或提前初始化变量,能规避这一解析问题,确保两个参数都能被正确传递。

内容的提问来源于stack exchange,提问作者babukinator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:45:34