2016-10-19 33 views
0

這是我在我的controller.js中使用的模態彈出框。我只想在按鈕單擊時調用在同一個控制器中定義的函數send()。但ng-click在modalpopup中不起作用。如何從模態彈出框中調用在controller.js中定義的函數

$scope.sendMessage = function(order_id) { 
     var modalInstance = $uibModal.open({ 
      template: '<div id="order-flow-modal" class="inmodal">' + 
        '<div class="modal-header">' + 
        '<h4 class="modal-title">Order Description</h4>' + 
        '<small class="font-bold"></div>' + 
        '<div class="modal-body"><textarea name="message" ng-model="formData.message" style="width:100%;"></textarea></div><div style="clear:both;"><input type="text" ng-model="formData.order_id" value="'+order_id+'"></div>' + 
        '<div class="modal-footer">' + 
        '<a class="btn btn-success" ng-click="send()">Send</a>' + 
        '<button type="button" class="btn btn-white" ng-click="cancel()">Close</button>' + 
        '</div>' + 
        '</div>', 
      windowClass: "animated flipInY", 
      controller: ModalInstanceCtrl, 
      backdrop: true 
     }); 
     modalInstance.opened.then(function() { 

     }); 
     modalInstance.result.then(function() { 

     }, function() { 

     }); 
     return false; 
    }; 

而下面是我的send()。

$scope.send = function() { 
     alert('hi'); 
     return false; 
    }; 
+0

是的您在模態彈出窗口中指定的控制器,相同的控制器你正在寫這個代碼?如果是這樣,不會this.send()工作? – rrd

+0

沒有其他控制器。 – AAT

回答

0

您可以通過resolve config param提供您的功能給模態控制器。

或者您可以提供現有的範圍與定義的發送功能模態。

$uibModal.open({ 
... 
    scope: $scope 
... 
}) 
+0

你能舉一些例子嗎? – AAT

0

你可以在這裏使用broadcaston事件emmitters。

從您的ModalInstanceCtrl廣播並在您當前的控制器中收聽。

您當前的控制器,

allControllers.controller('myController', ['$scope','$rootScope', 
    function($scope,$rootScope) { 
     $scope.sendMessage = function(order_id) { 
       var modalInstance = $uibModal.open({ 
        template: '<div id="order-flow-modal" class="inmodal">' + 
          '<div class="modal-header">' + 
          '<h4 class="modal-title">Order Description</h4>' + 
          '<small class="font-bold"></div>' + 
          '<div class="modal-body"><textarea name="message" ng-model="formData.message" style="width:100%;"></textarea></div><div style="clear:both;"><input type="text" ng-model="formData.order_id" value="'+order_id+'"></div>' + 
          '<div class="modal-footer">' + 
          '<a class="btn btn-success" ng-click="send()">Send</a>' + 
          '<button type="button" class="btn btn-white" ng-click="cancel()">Close</button>' + 
          '</div>' + 
          '</div>', 
        windowClass: "animated flipInY", 
        controller: ModalInstanceCtrl, 
        backdrop: true 
       }); 
       modalInstance.opened.then(function() { 

       }); 
       modalInstance.result.then(function() { 

       }, function() { 

       }); 
       return false; 
     }; 

     $scope.$on('send_called', function(event, args) { 

     alert('Hi') 

     }); 
    }]) 

ModalInstanceCtrl:

allControllers.controller('ModalInstanceCtrl', ['$scope','$rootScope', 
    function($scope,$rootScope) { 

    $scope.send = function() { 
     $rootScope.$broadcast('send_called'); 
     return false; 
    }; 
    }]) 

如果廣播發送方法被調用後,您可以接收電流控制器

Refer this link

相關問題