2014-04-02 104 views
2

您好我有下面的HTMLAngularjs未定义的错误

<tbody ng-repeat="c in forms"> 
     <tr> 
      <td> <input type="text" ng-model=c.name /> </td> 
      <td> <input type="text" ng-model=c.ac /> </td>       
     </tr> 
     <tr ng-repeat="a in c.te"> 

      <td> <input type="text" ng-model=a.name /> </td> 
      <td> <input type="text" ng-model=b.ac /></td>                  
     </tr> 
    </tbody> 
    <button ng-click="add(c)">Add</button> 
    <button ng-click="submit(c)">Crate account</button> 

在我的控制器

$scope.forms = [{ 
     "name" : "form1", "ac": 251 
    }, { 
     "name": "form2", "ac": 252 
    }, { 
     "name": "form3", "ac": 253 
    }]; 


    $scope.addRows = function (c) { 
     alert(form); 
     if (typeof c.te == 'undefined') { 
      c.te = []; 
     } 
     alert("pushing"); 
     c.te.push({ name: '', ac: ''});  
    }; 

我一直在,如果收到错误(typeof运算c.te == '未定义')说

Error: c is undefined 

请让我知道这里有什么问题。 if语句应检查它是否未定义,但它的工作原理谢谢

回答

1

c未定义(而不是对象),读取te属性会引发错误。

因为在检查typeof c.te === 'undefined'时,在执行typeof之前,javascript将首先从c读取属性te

if (typeof c === 'undefined') { 
    c = {}; 
} 
if (typeof c.te === 'undefined') { 
    c.te = []; 
} 

如果您知道这两个cc.te应truthy你可以写:

c = c || {}; 
c.te = c.te || []; 
2

由于button标记位于ng-repeat指令之外,所以出现错误。

<tbody ng-repeat="c in forms"> 
    <tr> 
     <td> 
      <input type="text" ng-model=c.name /> 
     </td> 
     <td> 
      <input type="text" ng-model=c.ac /> 
     </td> 
    </tr> 
    <tr ng-repeat="a in c.te"> 
     <td> 
      <input type="text" ng-model=a.name /> 
     </td> 
     <td> 
      <input type="text" ng-model=b.ac /> 
     </td> 
    </tr> 
</tbody> 

<button ng-click="add()">Add</button> 
<button ng-click="submit()">Crate account</button> 

你的控制器代码也很奇怪 - 你想添加一条新记录,但你似乎正在接受一个参数?

编辑:如果它已经不是很明显,由于该按钮在ng-repeat指令之外,c参数不再适用于按钮标签。因此,在调用示波器功能时,参数是undefined,因此是错误。

0
if (typeof c.te == 'undefined') { 
     c.te = []; 
    } 

这里您试图检查是否c.te未定义。首先你需要检查c是否未定义。这就是错误所说的。