2016-04-21 7 views
0

Ich habe eine Webseite, die eine modale Seite öffnet, wenn Sie auf "Bearbeiten" klicken. Situation: Mit einem Angular JS ng-repeat zeige ich eine Liste von Objekten mit dem Namen customer;Javascript Array in Objekt leer, wenn an Funktion übergeben

<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> 

Der Objektkunde wird auf diese Weise eingerichtet;

{ 
"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" : [] 
      } 
     ] 
    } 
] 
} 

Bitte beachten Sie, dass Kunden < -> EmpAgency eine viele zu viele Beziehung ist in meinem MVC, ich weiß nicht, ob dies etwas mit dem Problem zu tun hat. Das Problem liegt im openEditDialog (Cust); Funktion

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); 
     }); 
    } 

Das folgende Objekt wird an diese Funktion übergeben:

Object {ID: 1, Name: "Test", City: "Test", CountryCode: "NLD", CurrencyCode: "EUR"…} 
//omitted 
empAgencies:Array[0] 

Wie Sie das Array mit empAgencies sehen kann, ist aus irgendeinem Grund geleert. Aus diesem Grunde meine Dropdownbox ausgewählte Eigenschaft ist nicht richtig aufgefüllt (enthält die vollständige Liste der empAgencies)

+0

haben Sie versucht, den Filter 'filterCustomers' zu entfernen? – Pietro

+0

@Pietro Danke, ich habe gerade jetzt versucht. Das ändert nichts. – Brian

+0

Es sieht so aus, als ob das Array empAgents nur nach dem vollständigen Laden der modalen Seite geleert wird. Ich habe einen schnellen Screenshot des Cust-Objekts auf meiner Modal-Seite gemacht, während es geladen wurde und alle EmpAgents dort waren. Ich weiß nicht, ob das hilft – Brian

Antwort

0

nur $ Umfang vom Rückruf entfernen.

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

Das scheint nichts zu ändern? Das Array empAgents bleibt leer. Können Sie erklären, warum dies eine Lösung sein könnte? – Brian

0

ich die Lösung gefunden habe; Meine Dropdown-Box auf der modalen Seite hat eine neue Liste von EmpAgenten. Mein ng-Modell ist editedCustomer.empAgencies. Da in meiner Dropdown-Box nichts ausgewählt ist, verliert das Kundenobjekt automatisch seinen Wert.

Ich muss noch sehen, wie ich das lösen werde, um den ausgewählten Wert in meiner Auswahl rechts zu bekommen.

(bearbeiten) Ich habe das auf folgende Weise gelöst; Weil es eine viele zu viele Beziehung war, hatte ich die Arrays das gleiche zu machen:

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; 

Nun sind die Objekte gleich sind das ausgewählte Element korrekt ausgefüllt werden. Auch wenn ich der empAgency neue Variablen hinzufüge, wird diese Auswahlbox weiter funktionieren.

Verwandte Themen