Возврат данных из модального диалогового окна angularjs

Я новичок в AngularJS и имею проблему с возвратом данных из модальной службы диалога. В принципе, я скопировал сервис Dan Wahlin http://weblogs.asp.net/dwahlin/archive/2013/09/18/building-an-angularjs-modal-service.aspx и вызываю его из своего контроллера.

myApp.controller('MyController', function($scope, ModalService) {
    window.scope = $scope;
    $scope.mydata = {name: ""};

    $scope.showModal = function () {

        var modalOptions    = {
            closeButtonText: 'Cancel',
            actionButtonText: 'Save',
            headerText: 'Save Dialog'
        }

        ModalService.showModal({}, modalOptions).then(function (result) {

        });
    }

});

Тогда у меня есть частичное, например:

<div class="modal-header">
    <h3>{{modalOptions.headerText}}</h3>
</div>
<form ng-submit="modalOptions.submit()">
<div class="modal-body">
    <label>Name</label>
    <input type="text" data-ng-model="mydata.name">
</div>
<div class="modal-footer">
    <button type="button" class="btn" data-ng-click="modalOptions.close()">{{modalOptions.closeButtonText}}</button>
    <button type="submit" class="btn btn-primary">{{modalOptions.actionButtonText}}</button>
</div>

Этот модал вызывается следующим образом:

<button class="btn btn-primary hidden pull-right" id="save" data-ng-click="showModal()">Save</button>

Итак, мой вопрос: как вернуть значение поля имени контроллеру? Я смотрел по всему Интернету, и во всех примерах есть функция, которая открывает модальную систему внутри контроллера, что делает ее намного проще, поскольку в функции, которая открывает модальную функцию, также существует функция $scope от контроллера.

Я попытался добавить следующий код к функции "show" в службе, но это не сработало.

    tempModalDefaults.resolve = function($scope) {
        mydata = function () {
            return $scope.mydata;
        }
    }

Спасибо

P.S. Я переименовал modalService в ModalService в свой код, чтобы не опечатка. Модаль открывается и закрывается как следует, я просто не могу передать значение поля обратно контроллеру.

Ответы

Ответ 1

В вашей кнопке добавьте data-ng-click="modalOptions.ok(mydata)"

<button type="submit" class="btn btn-primary" data-ng-click="modalOptions.ok(mydata)">{{modalOptions.actionButtonText}}</button>

И вы можете получить его от:

ModalService.showModal({}, modalOptions).then(function (result) {
              console.log(result.name);
        });

DEMO

Если вы хотите использовать функцию modalOptions.submit, вам нужно немного изменить свой код

В вашем HTML передайте функцию mydata в modalOptions.submit:

<form ng-submit="modalOptions.submit(mydata)">

Ваша служба модели замените в функции show:

return $modal.open(tempModalDefaults); //remove the .result

Ваш контроллер:

$scope.showModal = function () {

        var modalOptions    = {
            closeButtonText: 'Cancel',
            actionButtonText: 'Save',
            headerText: 'Save Dialog',
            submit:function(result){
              $modalInstance.close(result);
            }
        }

        var $modalInstance = ModalService.showModal({}, modalOptions);
        $modalInstance.result.then(function (result) {
             console.log(result.name);
        });
    }

DEMO