TypeError:无法读取属性' indexOf' $ scope.search angular bootstrap

时间:2017-10-27 20:07:28

标签: javascript angularjs html5 angular-ui-bootstrap

我正在尝试编写一个基于几个属性过滤行的函数。当我运行代码时,列表没有显示,并且出现错误" TypeError:无法读取属性' name'未定义"。我正在尝试搜索列名称和位置。这是我的HTML代码

<tbody ng-if="routerList.length">
<tr ng-repeat="router in routerList | orderBy: rule|filter : search | limitTo:5:5*(naviagtion.currentPage-1) ">
    <td><span>{{router.routerId}}</span></td>
    <td><span>{{router.name}}</span></td>
    <td><span>{{router.macAddr}}</span></td>
    <td><span>{{router.primaryIP}}</span></td>
    <td><span>{{router.status}}</span></td>
    <td><span>{{router.location}}</span></td> 

</tr>
</tbody>

在我的控制器中,我有一个功能搜索

$scope.search = function(item){
    if($rootScope.naviagtion.searchText == undefined){
        return true;
    }else{
        if(item.router.name.indexOf($rootScope.naviagtion.searchText) != -1 || item.router.location.indexOf($rootScope.naviagtion.searchText) != -1 ){
            return true;
        }
    }
    return false;
}

有人可以告诉我什么是错的吗?

1 个答案:

答案 0 :(得分:1)

错误消息&#34; TypeError:无法读取属性&#39; name&#39;未定义&#34;意味着有一个变量,其上有一个点运算符,没有定义。根据您发布的代码,看起来没有定义路由器。

router.name

快速检查if语句可以解决问题。

if(item && item.router && ...) { }

如果定义了item.router,那么它可能在你的代码中的某个地方,你有一个未定义的对象,带有一个点运算符到一个&#39; name&#39;属性。

someUndefinedObject.name

我通常使用调试器来确保在看到此错误时我的对象实际上已定义。