[英]Getting TypeError using Angular.js and JavaScript
使用angular.js選擇數據時出現以下錯誤。
angularjs.js:107 TypeError: Cannot set property '0' of undefined
at n.$scope.removeBorder (adminCustomerNewController.js:55)
at fn (eval at <anonymous> (angularjs.js:212), <anonymous>:4:617)
at n.$eval (angularjs.js:132)
at angularjs.js:251
at angularjs.js:263
at m (angularjs.js:7)
at $$writeModelToScope (angularjs.js:263)
at angularjs.js:263
at g (angularjs.js:261)
at f (angularjs.js:261)
我的代碼如下。
<tr ng-repeat="d in days">
<td>{{d.day_name}}</td>
<td>
<table>
<tbody>
<tr ng-repeat="answer in d.answers">
<td>
<select class="form-control" id="answer_{{$index}}_{{$parent.$index}}_category" name="answer_{{$index}}_category" ng-model="answer.catagory" ng-options="cat.name for cat in listOfCatagory track by cat.value" ng-change="removeBorder($index,answer.catagory.value,$parent.$index);">
<option value="">Select Category</option>
</select>
</td>
</tr>
</tbody>
</table>
</td>
<td>
<table>
<tbody>
<tr ng-repeat="answer in d.answers">
<td>
<select class="form-control" id="answer_{{$index}}_{{$parent.$index}}_subcategory" name="answer_{{$index}}_subcategory" ng-model="answer.subcatagory" ng-options="sub.name for sub in listOfSubCatagory[$index][$parent.index] track by sub.value">
<option value="">Select Subcategory</option>
</select>
</td>
</tr>
</tbody>
</table>
</td>
<td>
<table>
<tbody>
<tr ng-repeat="answer in d.answers">
<td>
<input type="text" id="answer_{{$index}}_{{$parent.$index}}_comment" name="answer_{{$index}}_comment" placeholder="Add Comment" ng-model="answers.comment">
</td>
</tr>
</tbody>
</table>
</td>
<td>
<table>
<tbody>
<tr ng-repeat="answer in d.answers">
<td>
<input type="submit" name="plus" id="plus" value="+" style="width:20px; text-align:center;" ng-click="addNewRow(d.answers, true)">
<div ng-show="$first && !$last">
<input type="submit" name="minus" id="minus" value="-" style="width:20px; text-align:center;" ng-click="removeRow(d.answers, $last)">
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
我的控制器端代碼如下。
$scope.days=[];
$http({
method:'GET',
url:"php/customerInfo.php?action=day",
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).then(function successCallback(response){
//console.log('day',response.data);
angular.forEach(response.data, function(obj) {
obj.answers = [];
$scope.addNewRow(obj.answers);
$scope.days.push(obj);
});
},function errorCallback(response) {
})
}
$scope.addNewRow = function(answers, hasDelete) {
answers.push({
category: null,
subcategory: null,
comment: null,
hasDelete: hasDelete ? hasDelete : false
});
};
$scope.removeRow = function(answers, $index){
answers.splice($index, 1);
};
$scope.listOfSubCatagory = [];
// $scope.listOfSubCatagory = [[]]
$scope.removeBorder=function(index,catvalue,parent){
console.log('ind',index,catvalue,parent);
//$scope['listOfSubCatagory'+parent][index]=[];
//$scope.listOfSubCatagory[index][parent]=[[]];
$scope.listOfSubCatagory[index] = []
$scope.listOfSubCatagory[index][parent] = []
var catdata=$.param({'action':'subcat','cat_id':catvalue});
$http({
method:'POST',
url:"php/customerInfo.php",
data:catdata,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).then(function successCallback(response){
angular.forEach(response.data,function(obj){
var data={'name':obj.subcat_name,'value':obj.subcat_id};
$scope.listOfSubCatagory[index][parent].push(data);
})
},function errorCallback(response) {
})
}
我在$scope.listOfSubCatagory[index][parent]=[];
遇到錯誤$scope.listOfSubCatagory[index][parent]=[];
。
該錯誤意味着parent
為0
, $scope.listOfSubCatagory[index][0]
undefined
。
您需要將listOfSubCatagory
初始化為2d數組:
$scope.listOfSubCatagory = [[]];
代替
$scope.listOfSubCatagory = [];
也:
您覆蓋$scope.listOfSubCatagory[index][parent].push(data);
在您的每一次迭代for each
循環。
您在哪里初始化2d array
全長? 如果parent
或index
不為0
$scope.listOfSubCatagory[index][parent]
將不確定。
在當前腳本中, undefined
$scope.listOfSubCatagory[index]
,因為未在該索引處$scope.listOfSubCatagory[index]
數組。 還需要在parent
索引處對其進行初始化
$scope.listOfSubCatagory[index][parent]=[]; // wrong one
創建數組的方式是創建稀疏數組 。
$scope.listOfSubCatagory = [];
$scope.listOfSubCatagory[index] = []
$scope.listOfSubCatagory[index][parent] = []
編輯1:
代替
$scope.listOfSubCatagory[index][parent].push(data);
用這個
$scope.listOfSubCatagory[index][parent].push($.extend( {}, data));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.