传递给函数时对象为空的 JavaScript 数组
Javascript array in object empty when passed to function
我有一个网页,点击"编辑"时会打开一个模态页面。情况:使用Angular JS ng-repeat,我显示了一个名为customer的对象列表;
<div class="col-sm-6" ng-repeat="Cust in Customers | filter: filterCustomers">
//code omitted for clarity
<buton class="btn btn-default btn-xs" ng-click="openEditDialog(Cust);">Edit<i class="fa fa-pencil pull-right"></i></buton>
对象客户以这种方式设置;
{
"ID" : 1,
"Name" : "Test",
"City" : "Test",
"CountryCode" : "NLD",
"CurrencyCode" : "EUR",
"empAgencies" : [{
"ID" : 1,
"Name" : "Test",
"NumberOfEmployees" : 0,
"customers" : []
}, {
"ID" : 2,
"Name" : "Test1",
"NumberOfEmployees" : 0,
"customers" : [{
"ID" : 4,
"Name" : "TestC",
"City" : "Test",
"CountryCode" : "NLD",
"CurrencyCode" : "EUR",
"empAgencies" : []
}
]
}
]
}
请注意,客户<->EmpAgency是我的MVC中的多对多关系,我不知道这是否与问题有关。问题出在打开编辑对话框(Cust);功能
function openEditDialog(Cust) {
$scope.editedCustomer = Cust;
console.log($scope.editedCustomer);
$uibModal.open({
templateUrl: 'scripts/spa/customer/editCustomerModal.html',
controller: 'editCustomerCtrl',
scope: $scope
}).result.then(function ($scope) {
search($scope.page);
}, function () {
search($scope.page);
});
}
以下对象将传递给此函数:
Object {ID: 1, Name: "Test", City: "Test", CountryCode: "NLD", CurrencyCode: "EUR"…}
//omitted
empAgencies:Array[0]
如您所见,由于某种原因,包含 empAgents 的数组被清空了。因此,我的下拉框选择的属性未正确填充。(包含 empAgents 的完整列表)
只需从回调中删除$scope:
}).result.then(function () {
search($scope.page);
}, function () {
search($scope.page);
});
}
我已经找到了解决方案;我在模态页面上的下拉框有一个新的 empAgency 列表。我的ng-model是编辑的Customer.empAgents。由于我的下拉框中未选择任何内容,因此客户对象会自动丢失其值。
我仍然需要看看我将如何解决这个问题才能在我的选择权中获得选定的值。
(编辑)我通过以下方式解决了这个问题;因为这是一个多对多的关系,所以我必须使数组相同:
var array = new Array();
for (var i = 0; i < $scope.AgencyDropDown.length; ++i) {
array.push({
ID : $scope.AgencyDropDown[i].ID,
Name : $scope.AgencyDropDown[i].Name
});
}
$scope.AgencyDropDownSubSet = array;
var array1 = new Array();
for (var i = 0; i < $scope.editedCustomer.empAgencies.length; ++i) {
array1.push({
ID : $scope.editedCustomer.empAgencies[i].ID,
Name : $scope.editedCustomer.empAgencies[i].Name
});
}
$scope.editedCustomer.empAgencies = array1;
现在对象相同,所选项目将被正确填充。即使我向empAgency添加新变量,此选择框也将继续工作。
相关文章:
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 将Javascript数组发送到控制器ASP.NET MVC
- JavaScript数组包含一个值
- 将JavaScript数组传递给函数
- javascript:数组循环
- 将数据存储在javascript数组中以供进一步使用
- 在Javascript数组中查找绝对最大值
- JavaScript数组优化以提高性能
- 在javascript数组中分散数字
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- Javascript数组动态
- javascript数组元素是否知道其封闭数组
- 将 JSON 数组解析为 JavaScript 数组
- 将Transform和Instance Variable转换为对象的JavaScript数组
- 使用Web Html表单创建Javascript数组
- 从重复的javascript数组结果集中只获取一行
- 如何为Javascript数组()的使用准备PHP变量
- Javascript数组和函数
- 为DataTables aoColumnDefs创建JavaScript数组(JSON格式)