2016-06-21 2 views
1

Я бы хотел представить пользователю всплывающее предупреждающее сообщение перед выполнением действия (удалить в этом случае). Если они нажмут okay в модальном режиме, это будет продолжаться, если они нажмут cancel, он сделает что-то еще.Угловое модальное обещание возврата

Для этого я пытаюсь передать модальное обещание по цепочке обратно к первоначальному вызову $rootScope.openDirections('warning').then(..., чтобы я мог решить, что там делать.

Однако я получаю сообщение об ошибке:.

$ rootScope.openDirections (...), то это не функцияat Scope.$scope.deleteObj

указал мне, что обещание не возвращается:

$scope.deleteObj = function (id, type) { 
     $rootScope.openDirections('warning').then(function (res) { 
      // Do Stuff 
     }, function (err) { 
      console.log('ERROR', err); 
     }); 

Это вызывает функцию $ rootScope: (Я вижу, что тип объекта здесь является обещанием ... поэтому он не должен возвращаться прямо к исходному абоненту?)

$rootScope.openDirections = function (type) { 
     // A Promise: Object {result: Promise, opened: Promise, rendered: Promise} 
     return Modal.showDirections(type); 
    }; 

Который называет Modal фабрику для направления модальный:

 return { 
      ... 
      showDirections: function(type) { 
       return $modal.open({ 
        backdrop: 'static', 
        templateUrl: 'modal.html', 
        controller: 'directionsCtrl', 
        resolve: { 
         // Display custom modal template 
         obj: function() { 
          if (type === 'markdown') { 
           return { 
            template: '/modals/directions.html' 
           }; 
          } else { 
           return { 
            template: '/modals/message.html' 
           }; 
          } 
         }, 
         testID : function() { 
          return 'WHAT DO I RETURN HERE?'; 
         } 
        } 
       }); 
      } 

Что делает message.html шаблон модальный:

<div class="admin-directions"> 
    <div class="directions"> 
     ARE YOU SURE YOU WANT TO DELETE THIS? 
    </div> 
    <p class="dismiss-admin-help" ng-click="okay()">Okay</p> 
    <p class="dismiss-admin-help" ng-click="cancel()">Cancel</p> 
</div> 

который использует directionsCtrl для Modal:

angular 
    .module('DDE') 
    .controller('directionsCtrl', ['$rootScope', '$scope', '$modalInstance', 'Modal', 'obj', 'Auth', 'VARS', '$route', '$location', 'testID', 
     function ($rootScope, $scope, $modalInstance, Modal, obj, Auth, VARS, $route, $location, testID) { 

      $scope.template = obj.template; 

      $scope.testID = ''; 

      /** 
      * Dismiss modal 
      */ 
      $scope.ok = function() { 
       $scope.testID = 'okay'; 
       return $modalInstance.result($scope.testID); 
      }; 

      $scope.cancel = function() { 
       $scope.testID = 'cancel'; 
       return $modalInstance.result($scope.testID); 
      }; 

    }]); 

ответ

1

$ modal.open возвращает $ modalInstanc e, которое имеет свойство, называемое результатом, которое является обещанием. Вам нужно позвонить .then(). Так что в вашем случае, вы хотите:

$rootScope.openDirections('warning').result.then(function (res) { 
     // Do Stuff 
    }, function (err) { 
     console.log('ERROR', err); 
    }); 

или в качестве альтернативы, в методе openDirections, вы могли бы просто вернуть обещание:

 showDirections: function(type) { 
      return $modal.open({ 
       //all your current stuff stays the same here 
      }).result; //<-- notice that you are now returning the promise 
     } 
+0

Ладно, мой '$ modal' экземпляр не в то же самое а скорее на собственной фабрике. Поэтому, что я «решаю» точно на фабрике, чтобы вернуться к исходному абоненту? – Growler

+0

Что вы подразумеваете под этим? Ваша ошибка исчезла, когда вы сделали то, что я предложил? – mcgraphix

+0

Кнопки '$ scope.ok' и' $ scope.cancel' больше не работают с модальным – Growler

Смежные вопросы