2014-02-11 17 views
2

我想讓我的Angular Ui Modal控制器/對象在 之外聲明它觸發控制器(&在另一個文件中),而不會對全局名稱空間造成污染。如何在控制器之外聲明Angular UI Modal?

這可能嗎?是否有可能像常規控制器一樣聲明模態控制器 並以某種方式傳遞參數(來自我的 觸發控制器)?

我目前有:(不涼)

(function() { 
    TriggeringCtrl.$inject = ['$scope', 'htmlClient', 'apiCall', '$timeout', '$modal', 'utility']; 
    function TriggeringCtrl($scope, htmlClient, apiCall, $timeout, $modal, utility) { 

    }; 
    app.controller('TriggeringCtrl', TriggeringCtrl); 
    var ModalCtrl = function ($scope, $modalInstance, node, apiCall, utility) { 
    } 
}); 

回答

3

在這裏你有例子不是全局: http://plnkr.co/edit/fCfvcnwP9JSHbX5L2Vuu?p=preview

var app = angular.module('plunker', ['ui.bootstrap']); 
app.controller('ModalDemoCtrl', function ($scope, $modal, $q, $timeout) { 


    $scope.open = function() { 
    var modalInstance = $modal.open({ 
     templateUrl: 'myModalContent.html', 
     controller: function ($scope, $modalInstance, items) { 

     $scope.items = items; 


     $scope.ok = function() { 
      $modalInstance.close('item'); 
     }; 

     $scope.cancel = function() { 
      $modalInstance.dismiss('cancel'); 
     }; 
     }, 
     resolve: { 
     items: function() { 
      var p = $q.defer(); /// simulate data 
      $timeout(function(){ 
      p.resolve(['item1', 'item2', 'item3']); 
      }); 
      return p.promise.then(function(data){ 
      return data; 
      }); 
     } 
     } 
    }); 
    }; 

}); 
+0

這是一個很好的答案雖然例子是更復雜當涉及到承諾的工作時需要它們。 $超時本身是基於promise的,所以這個例子可以簡化爲http://plnkr.co/edit/yaQpW9uyZHmo8BdIaLxt?p=preview –

+1

這不允許模態控制器在一個單獨的文件中聲明,因爲它在聲明中觸發器控制器? – Baconbeastnz

+1

@Baconbeastnz你也可以這樣做:http://plnkr.co/edit/lI2Z8FEjZIdx6lelnqhx?p =預覽 – igorzg