2014-04-02 124 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是否未定義。這就是錯誤所說的。