在模态和控制器之间传递数据

Passing data between modal and controller

如何使数据在控制器中可用?我创建了一个非常简单的 Plunk,它应该以模式在 $scope 上显示数据。然后我需要更新数据,并且只在单击“确定”时更新 $scope。单击“取消”将放弃更改。

但在进行该步骤之前,我需要使范围可用于模态。大多数示例使用两个控制器。我是否需要另一个控制器,如本例所示:Passing Data to Twitter Bootstrap Modal in Angular?在我的控制器中,我有以下内容:

$scope.open = function(){
  var modalInstance = $uibModal.open({
    templateUrl: 'modal.html',
    controller: 'ModalInstanceController',
    resolve: {
      users: function() {
        return $scope.users;
      }
    }
  });
};

如何在模板中显示用户?笨蛋在这里:http://plnkr.co/edit/FuXjSwtljQtFYOtFRV18?p=preview

为了能够访问控制器的范围,您需要在创建它的实例时将范围对象传递给模式:

  $scope.open = function() {
    var modalinstance = $uibModal.open({
      scope: $scope,
      templateUrl: 'modal.html',
      resolve: {
        users: function() {
          return $scope.users;
        }
      }
    })
  };

这样 Angular 将创建控制器的子范围 $scope 因此您将能够访问模态范围内的项目:

演示http://plnkr.co/edit/0m9oktX2JHFmeiaDfOpO?p=preview

你可以只用一个控制器来完成,这只是一个 "dirty" 解决方案,因为两个 html 文件将共享同一个控制器,这可能是一个问题。

您面临的问题是在模式中您没有定义 scope,因此您正在做的 foreach (ng-repeat) 没有获取任何元素

您可以通过将 modal.html 更改为

轻松修复它
<div ng-controller="modalController"><div class="modal-header">
  <h3 class="modal-title">Modal</h3>
</div>
<div class="modal-body">
  <p>Existing users:</p>
  <ul>
    <li ng-repeat="user in users">{{user}}</li>
  </ul>

</div>
<div class="modal-footer">
  <button class="btn btn-default" type="button">Close</button>
</div>
</div>

如你所见,现在这个模态有一个控制器(与主 window 相同)因此会有一个 scope

或者只是将范围传递给模态定义添加

var modalinstance = $uibModal.open({
      scope: $scope,...

很脏,你是 "polluting" 范围,但它有效:)

这是我当前项目的一些代码,如果您想在模态上使用任何 ng-click,您的函数必须驻留在 ModalInstanceController

app.controller('dashboardCtrl', function ($scope, $rootScope, $location, $http, Data, $uibModal ) {

   $scope.users = '';

  $scope.open = function(){
     var modalInstance = $uibModal.open({
        templateUrl: 'modal.html',
        controller: 'ModalInstanceController',
        resolve: {
           users: function() {
             return $scope.users;
           }
        }
     })
   }
});

app.controller('ModalInstanceController', function ($scope, $uibModal, $uibModalInstance, users, $rootScope, $http, Data) {
  $scope.ok = function () {
    $uibModalInstance.close($scope.selected.item);
  }

  $scope.cancel = function () {
    $uibModalInstance.dismiss('cancel');
  }

  $scope.users = users ;
  $scope.selected = {
   users: $scope.users[0]
  };
});

您可以在模式中访问范围 -

 $scope.open = function(){
    var modalinstance = $uibModal.open({
      templateUrl: 'modal.html',
      scope:$scope

    })
  };