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

ui-grid中ng-if使用row.entity.xx作为参数的异常问题排查

解决AngularJS ng-if中数组indexOf结合变量失效的问题

看起来你遇到的问题大概率是类型不匹配导致的,我来给你拆解分析并给出解决方案:

问题根源

你提到row.entity.id的值是1,但这里的1很可能是字符串类型的"1",而你数组里的元素是数字类型的1。indexOf方法是基于严格相等(===)来匹配的,字符串和数字不会被视为相等,所以[1,2,3].indexOf("1")会返回-1,直接导致ng-if判断不生效。

而row.entity.id == 1能正常工作,是因为==是宽松相等运算符,会自动做类型转换——字符串"1"会被转成数字1后再比较,所以结果为true。

验证方法

你可以先在页面上打印row.entity.id的类型来确认:

<!-- 打印变量类型 -->
<div>{{typeof row.entity.id}}</div>

如果输出是string,那就能坐实这个类型不匹配的问题了。

解决方案

你可以选下面任意一种方法解决:

  1. 把数组元素改成字符串类型

    <div ng-if="['1','2','3'].indexOf(row.entity.id) > -1">...</div>
    
  2. 把row.entity.id转成数字类型
    用Number()或者parseInt()做类型转换:

    <div ng-if="[1,2,3].indexOf(Number(row.entity.id)) > -1">...</div>
    
  3. 使用控制器自定义方法(更优雅)
    如果你觉得在模板里写转换逻辑有点繁琐,可以在控制器里定义一个判断方法:

    // 控制器内代码
    $scope.isIdInTargetList = function(id) {
      // includes方法返回布尔值,比indexOf判断>-1更直观
      return [1,2,3].includes(Number(id));
    }
    

    然后在模板里调用这个方法:

    <div ng-if="isIdInTargetList(row.entity.id)">...</div>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:24:34