繁体   English   中英

传递给函数的对象中的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" : []
            }
        ]
    }
]
}

请注意,Customer <-> EmpAgency在我的MVC中是多对多关系,我不知道这是否与问题有关。 问题出在openEditDialog(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]

如您所见,包含empAgencies的数组由于某种原因而被清空。 因此,我的dropdownbox selected属性未正确填充。(包含empAgencies的完整列表)

只需从回调中删除$ scope即可:

         }).result.then(function () {
             search($scope.page);
         }, function () {
             search($scope.page);
         });
     }

我找到了解决方案; 模态页面上的我的下拉框具有新的临时代理列表。 我的ng模型是editedCustomer.empAgencies。 因为在我的下拉框中没有选择任何内容,所以客户对象会自动失去其价值。

我仍然必须查看如何解决此问题,以在我的选择权中获得所选值。

(编辑)我已经通过以下方式解决了这个问题; 因为是多对多的关系,所以我必须使数组相同:

   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添加新变量时,此选择框也将继续工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM