2016-04-21 97 views
0

当点击“编辑”时,我有一个打开模态页面的网页。情况: 使用Angular JS ng-repeat,我显示了一个名为customer的对象列表;当传递给函数时,对象中的Javascript数组为空

<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一对多的关系,我不知道这有什么关系的问题。 问题出在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选择属性不正确填充(包含empAgencies的完整列表)

+0

你有没有尝试删除过滤器'filterCustomers'? – Pietro

+0

@Pietro谢谢,我刚刚尝试过。这没有改变。 – Brian

+0

它看起来像阵列empAgencies只在完全加载模态页面后才被清空。我在我的模态页面上加载了一个Cust对象的快照,并在其中加载了所有的主管部门。我不知道这是否有任何帮助 – Brian

回答

0

刚刚从回调删除$范围:

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

这似乎没有改变?数组empAgencies保持为空。你能解释为什么这可能是一个解决方案吗? – Brian

0

我已经找到了解决办法; 模态页面上的我的dropdownbox有一个新的empAgencies列表。我的ng模型是编辑客户。由于我的下拉框中没有选择任何内容,因此客户对象会自动失去其价值。

我仍然必须看看我将如何解决这个问题,以便在我的选择权中获得选定的值。

(编辑)我已经通过以下方式解决了这个问题; 因为它是一个多对多的关系,我不得不做出阵列相同的:

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

相关问题