2014-04-18 2 views
1

서비스에서 약속을 수락 할 때 모달을 닫으려고합니다. 알아낼 수 없습니다. '정의되지 않은 속성 값을 읽을 수 없습니다.'라는 메시지가 나타납니다. 에 .. plunker에 대한Modular 컨트롤러 외부 모달 무시

변경 코드, 난 당신이 오류

CHECK 콘솔을 볼 수 있으며, angular.iu 사이트에서이 plunker을했다, 그리고 해고 라인을 추가

Plunker Modal Dismiss Example

+0

전체 컨트롤러를 게시 할 수 있습니까? 오류가 발생할 수있는 몇 가지 장소가 있습니다. –

+0

nvm. 지금 그것은 작동한다. ... 나는 왜 내가 havent 한 것을 바꾸 었는지 모른다. 그냥 –

+0

요령을 되풀이하겠습니다. 무작위로 작동합니다 .. 가끔은 그렇습니다. P –

답변

2

dismiss()을 호출 할 수 없습니다. 모달이 완전히 인스턴스화되어 열릴 때까지 모달 인스턴스에서. 보고있는 오류는 ui-bootstrap 내부에서 발생합니다. 여기서 내부 컬렉션에 열린 모달을 찾으려고 시도하지만 아직 거기에 없습니다.

open()

은 제대로 폐쇄을 처리하지 않는 경우 오류가 발생합니다, 모달 개방 완료하면 해결 약속 ... 각 1.6에서

var modalInstance = $modal.open({ /* ... */ }); 

modalInstance.opened.then(function() { 
    modalInstance.dismiss('dismiss'); 
}); 

Plunker

0

을 반환 그래서 "아마도 처리되지 않은 거부 : undefined"처럼. $ uibModal.open은 약속을 반환하고 콜백이 명시 적으로 정의되어 있지 않으면 콘솔에 오류가 표시됩니다. 귀하의 경우, 귀하는 서비스에서 폐쇄를 올바르게 처리하고 어디에서 모달 서비스를 호출 하는지를 원할 것입니다. 방출 할 버튼이 있고 다른 컨트롤러에 청취자가 있고 그 청취자에게 모달을 닫고 싶다고합시다. 다른 컨트롤러에서

.service('serviceModalName', function ($uibModal) { 
     this.open = function() { 
      var modalInstance = $uibModal.open({ 
       templateUrl: '', 
       controller: 'serviceNameController' 
      }); 
     }; 

     modal.result.then(function() { 
      modal.dismiss(); 
     }, angular.noop); 

}); 

(이제까지 당신의 응용 프로그램에서), 나는 모달 서비스 컨트롤러에 컨트롤러를 가정 $ uibModalInstance 있습니다 모달 서비스에

을 : 이것은 당신이해야 할 일이다 그것으로 주입 된, 그것의 닫히거나 부르는 기능을 부르지 않을 것이다.

.controller('someOtherController', function ($scope, serviceModalName) { 

     var modalService = serviceModalName.open(); 

     $scope.$on('modal.closed.somewhere', function (e, args) { 
      if (modalService) { 
        modalService.opened.then(function() { 
         modalService.close(); 
        }, angular.noop); 
      } 
     }; 

});