У меня есть веб-страница, которая открывает модальную страницу при нажатии на "редактировать". Ситуация: с помощью 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]
Как вы видите, Array, содержащий empAgencies, опорожняется по какой-то причине. Из-за этого мое выделенное свойство dropdownbox неправильно заполнено. (Содержит полный список empAgencies)
Я нашел решение; В моем выпадающем списке на модельной странице есть новый список empAgencies. Моя ng-модель отредактированаCustomer.empAgencies. Поскольку в моем dropdownbox ничего не выбрано, объект клиента автоматически теряет свое значение.
Я все еще должен увидеть, как я это разрешу, чтобы получить выбранное значение в моем правом выбора.
(edit) Я решил это следующим образом; Поскольку это было много-много отношений, мне пришлось сделать массивы одинаковыми:
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, этот флажок будет продолжать работать.
просто удалите $ scope из обратного вызова:
}).result.then(function () {
search($scope.page);
}, function () {
search($scope.page);
});
}
filterCustomers
?