Использование модального окна внутри ng-repeat
Вопрос
У меня есть ng-repeat
и я пытаюсь добавить модал, который передает ту же переменную области видимости в модальное окно.Я могу заставить модальное окно открыться, но значение области видимости из ng-repeat не отображается внутри модального.Надеюсь, мой код объясняет лучше.Это то, что у меня есть до сих пор:
<div ng-controller="CustomerController">
<div ng-repeat="customer in customers">
<button class="btn btn-default" ng-click="open()">{{ customer.name }}</button>
<!--MODAL WINDOW-->
<script type="text/ng-template" id="myModalContent.html">
<div class="modal-header">
<h3>The Customer Name is: {{ customer.name }}</h3>
</div>
<div class="modal-body">
This is where the Customer Details Goes<br />
{{ customer.details }}
</div>
<div class="modal-footer">
</div>
</script>
</div>
</div>
Контроллер:
app.controller('CustomerController', function($scope, $timeout, $modal, $log, customerServices) {
$scope.customers= customerServices.getCustomers();
// MODAL WINDOW
$scope.open = function () {
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
});
};
});
Приведенное выше действие открывает модальное окно.Однако данные о клиенте, такие как {{ customer.name }} из ng-repeat, не передаются в модальное окно.У меня что-то не так с контроллером?
Я пытаюсь создать это после просмотра примера пользовательского интерфейса Angular Bootrap здесь: http://angular-ui.github.io/bootstrap/
РЕДАКТИРОВАТЬ:
Вот пример jsfiddle: http://jsfiddle.net/Alien_time/8s9ss/3/
Решение
Я обновил вашу скрипку и приведенный ниже код также.Я надеюсь, что это поможет.
С уважением
var app = angular.module('app', ['ui.bootstrap']);
app.controller('ModalInstanceCtrl', function ($scope, $modalInstance, customer)
{
$scope.customer = customer;
});
app.controller('CustomerController', function($scope, $timeout, $modal, $log) {
$scope.customers = [
{
name: 'Ricky',
details: 'Some Details for Ricky',
},
{
name: 'Dicky',
details: 'Some Dicky Details',
},
{
name: 'Nicky',
details: 'Some Nicky Details',
}
];
// MODAL WINDOW
$scope.open = function (_customer) {
var modalInstance = $modal.open({
controller: "ModalInstanceCtrl",
templateUrl: 'myModalContent.html',
resolve: {
customer: function()
{
return _customer;
}
}
});
};
});
Другие советы
Вот как я настраиваю свои модалы для обработки элементов, которые я ng-повторяю и хочу отредактировать.Я предлагаю настроить его для работы с другим контроллером, потому что тогда вы сможете использовать DI для добавления разрешенного элемента в дочернюю область.
$scope.openModal = function(item)
// This sets up some of the options I want the modal to open with
var options = {}
angular.extend(options, {
templateUrl: '/views/userItems/form.html',
controller: 'ItemEditController',
resolve: {
// I resolve a copy of the so it dont mess up the original if they cancel
item: function() { return angular.copy(item); }
}
});
$modal.open(options).result.then(function(updatedItem) {
// after the user saves the edits to the item it gets passed back in the then function
if(updatedItem) {
// this is a service i have to deal with talking to my db
modelService.editItem(updatedItem).then(function(result) {
// get the result back, error check then update the scope
if(result.reason) {
$scope.addAlert({type: 'error', title: 'Application Error', msg: result.reason});
} else {
angular.extend(vital, result);
$scope.addAlert({type: 'success', msg: 'Successfully updated Item!'});
}
});
}
});
};