Angularjs未定义错误

时间:2014-04-02 07:37:08

标签: javascript angularjs

您好我关注html

 <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: ''});      
    };

我在if(typeof c.te =='undefined')说

时不断收到错误
Error: c is undefined

请告诉我这里有什么问题。 if语句应该检查它是否是未定义的,但它确实可以工作谢谢

3 个答案:

答案 0 :(得分: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,因而是错误。

答案 1 :(得分:1)

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

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

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

如果你知道cc.te都应该是真的,你可以写:

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

答案 2 :(得分:0)

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

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