如何将结果从angular-ui-bootstrap的模态传递给父而不关闭?

时间:2016-02-12 13:17:21

标签: angularjs angular-ui-bootstrap

根据https://angular-ui.github.io/bootstrap/#/modal,我想将模态的结果传递给父级而不关闭,但在示例代码中,它们只显示通过结束传递给父级的结果

$uibModalInstance.close($scope.selected.item);

我想在点击项目时将数据传递给父级,但我不知道这样做。我真的需要帮助。感谢。

2 个答案:

答案 0 :(得分:3)

这是关于控制器之间通信的一个非常常见的问题,因为您不想关闭模型并希望将数据传递给其他控制器。

问题的最快捷途径是使用$broadcast。在模态的控制器中,写如下:

// Make sure to use $rootScope
$rootScope.$broadcast("modalDataEventFoo", {selectedItem: $scope.selected.item});

现在,在您的父控制器中:

$scope.$on("modalDataEventFoo", function(event, data) {
     console.log("got the data from modal", data.selectedItem);
});

控制器之间通信的其他参考:

  1. What's the correct way to communicate between controllers in AngularJS?
  2. https://egghead.io/lessons/angularjs-sharing-data-between-controllers
  3. http://www.angulartutorial.net/2014/03/communicate-with-controllers-in-angular.html
  4. Communication between controllers in Angular

答案 1 :(得分:1)

另一种方法是在父控制器和模式控制器之间共享范围,在选项中声明scope属性:

var modalInstance = $uibModal.open({
  animation: $scope.animationsEnabled,
  templateUrl: 'myModalContent.html',
  controller: 'ModalInstanceCtrl',
  size: size,
  scope: $scope,
  resolve: {
    items: function () {
      return $scope.items;
    }
  }
});

检查此plunker,其中模态包含绑定到变量$scope.shared.name的输入元素: http://plnkr.co/edit/4xiEXATxAnvDKBSXxzQd