2015-12-29 2 views
3

Я создаю директиву, открывающую окно с угловым бутстрапом. При закрытии модального я хотел бы иметь функцию казнены, которая передается от атрибута директивы .. Вот что я до сих пор:Вызов функции родительской области с директивой

Это на index.tpl.html:

<popup class="something" .. on-close="update()"></popup> 

код Директивы, только определение сферы, так как есть много коды до этого:

scope: { 
     onClose: "&" 
     }, 
link: function(scope, element, attr){ 
      //some code  
      ...... 
      scope.closeFn = function(){ 
       scope.onClose(); 
     } 
     //opening of the modal: 
     var modalInstance = $modal.open({ 
        .... 
        templateUrl: 'path/to/template.tpl.html, 
        controller: 'PopupController', 
        scope: scope, 
        .... 
     }); 

в шаблоне всплывающего окна я функция связанного приложения к кнопке закрытия, которая вызывает функцию в «PopupController» который вызывает функцию closeFn из функции ссылки.

<button type="button" class="btn-close btn btn-large" ng-click="closePopup()">Close 
    </button> 

И в 'PopupController':

$scope.closeUploadPopup = function() { 
     $scope.$parent.closeFn(); 
     $modalInstance.close(); 
    }; 

Насколько я понимаю scope.onClose() должен выполнить функцию, указанную в атрибуте на-близко?

Я не предоставил много кода, так как есть много исходного кода, но я могу добавить больше, если это поможет.

ответ

1

Вам необходимо использовать надлежащий API $modal. Таким образом, modalInstance имеет свойство promise, которое вы можете использовать для «подписания», чтобы получать уведомление, когда всплывающее окно закрыто (кнопка «ОК») или отклонено (кнопка «Отмена»).

scope: { 
    onClose: "&" 
}, 
link: function(scope, element, attr) { 
    // ... some code  
    var modalInstance = $modal.open({ 
     // .... 
     templateUrl: 'path/to/template.tpl.html', 
     controller: 'PopupController', 
     scope: scope, 
     // .... 
    }); 

    modalInstance.result.then(function() { 
     scope.onClose(); // close handler 
    }, function() { 
     // dismiss handler 
    }); 

}; 

И при использовании шаблона всплывающего $close и $dismiss методы:

<button type="button" class="btn-close btn btn-large" ng-click="$close()">Close</button> 
+0

Привет, и спасибо за любезный ответ! Я попытался вызвать функцию по обещанию результата, но все же кажется, что родительская функция не вызывается. Я попытался отлаживать бит, и это то, что я наткнулся на 'destination [scopeName] = function (locals) { return parentGet (scope, locals); }; ' От углового исходного кода Где местные жители не определены. Может быть, я связываю вызов функции не так? – Loshmeey

+0

Он должен работать: http://plnkr.co/edit/QYC7gfbk45x6rLkZASdi?p=info Попробуйте обновить эту демонстрацию своим кодом и посмотреть, сможете ли вы предоставить демоверсию проблемы. – dfsq

1

Как вы присваиваете новый controller к вашему модального всплывающего окна, нет необходимости назначать scope свойство, которое в любом случае собирается быть игнорируются.

Для сделать это работает, я хотел бы предложить вам пройти эту ссылку на метод с решимостью вашего модального всплывающего окна

var modalInstance = $modal.open({ 
    templateUrl: 'path/to/template.tpl.html', 
    controller: 'PopupController', 
    resolve: { 
     onClose: scope.onClose 
    }, 
    //.... 
}); 

Контроллер

app.controller('PopupController', function($scope, onClose){ 
    $scope.closeUploadPopup = function() { 
     onClose(); 
     $modalInstance.close(); 
    }; 
}) 
+0

Привет и благодарю вас за ответ! К сожалению, с этим решением я испытываю то же поведение, что и с resopnse by @dfsq. Я упомянул о возможной проблеме в комментарии к его ответу, вы думаете, что я мог бы быть связан? – Loshmeey

1

Может быть, это диалоговое окно директива может помочь вам ,

Вы можете настроить 1. Диалог название 2. Тело сообщения 3. Кнопка те отображаются в диалоговом окне и соответствующего действия

<ng-dialog button="Yes|okFunction ,No|cancelFunction" dialogid="id-bootstrap" header="Angular Modal Dialog Directive " message="Hello World" theme="bootstrap"> 
</ng-dialog> 

диалоговое окно с двумя кнопками 1) Да и 2) Нет. okFunction и cancelFunction вызывается при клике. Эти функции определены в контроллере.

См. Ссылку ниже.

http://yogeshtutorials.blogspot.in/2015/12/angular-modal-dialog-directive.html