0

我想$modal在 AngularJS 中更新 a 的一些值,但无法理解如何做到这一点。示例代码如下:

var modalInstance;

  function setupCall(data) {

    var templateURL = 'partials/Chat.html';
    var cssClass =  'medium-Modal';
     modalInstance = $modal.open({
        backdrop: "static",
        keyboard: false,
        backdropClick: false,
        windowClass: cssClass,
        templateUrl: templateURL,
        controller: function ($scope, $modalInstance) {


            $scope.updateStatus=function() {
            ...
            }
        }
    });
    modalInstance.result.then(function() {

    });
}
 // first time i call this function to open model
 setupCall(event);

现在,当模型成功打开并且我从服务收到一些更新并且我再次想在模型中显示更新的值时,那么我如何updateStatus()从模型外部调用。我尝试使用 modalInstance.updateStatus(..),但它不起作用。有人可以告诉我这样做的正确方法吗?

4

3 回答 3

0

您可以将scope选项传递给$modal,然后使用 AngularJS 事件

var modalScope = $rootScope.$new();

myService.doSomethingAsync(function (data) {
  $rootScope.$emit('some event', data);
});

$modal.open({
  scope: modalScope,
  controller: function ($scope) {

    /* ... */

    $scope.$on('some event', function() {
      $scope.updateStatus();
    });
  }
});
于 2016-07-13T13:41:55.787 回答
0

您可以使用$broadcast调用该方法。例如,在您在视图的控制器(您正在调用setupCall或启动模式)中从您的服务收到更新后,请执行以下操作:

$rootScope.$broadcast("dataUpdatedFoo", {newData: "bar"));

现在,在您的模态控制器中,为此注册一个侦听器:

$scope.$on("dataUpdatedFoo", function(e, data) {
    $scope.updateStatus();
});
于 2016-07-13T13:43:10.030 回答
0

感谢大家。我通过添加自定义事件监听器来解决这个问题。

 var listeners = [];

function _addEventListener(listener) {
    listeners.push(listener);
    return listener;
}

function _removeListener(listener) {
    for (var i=0; i < listeners.length; i++){
        if (listeners[i] === listener){
            listeners.splice(i, 1);
            break;
        }
    }
} 
function setupCall(data) {
   ......
    modalInstance = $modal.open({
        backdrop: "static",
        keyboard: false,
        backdropClick: false,
        windowClass: cssClass,
        templateUrl: templateURL,
        controller: function ($scope, $modalInstance) {

            var listener = _addEventListener(function (event) {
              $log.info("chat msg: "+JSON.stringify(event));
            });

            $scope.$on('destroy', function () {
                _removeListener(listener)
            });
            ...
于 2016-07-13T14:53:55.280 回答