0

これは私のモーダル関数です:

vm.openUpdateStateModal = function (nextState, idea) {
  $scope.nextState = nextState;
  $scope.idea = idea;
  $scope.modalWindowOpen = true;

  $scope.modalInstance = $modal.open({
    templateUrl: 'updateStateModal',
    windowClass: 'updateStateModal',
    scope: $scope
  });

  $scope.modalInstance.result.then(function () {
    $scope.updateState(nextState, idea);
  });

  $scope.modalInstance.result.finally(function () {
    $scope.modalWindowOpen = false;
  });
};

モーダル用に別のコントローラーを持ちたくないので、パラメーターを個別にマッピングするのではなく、 $scope をパラメーターとして指定します。したがって、ビュー側では、すべての $scope 変数を使用できます。

昨日、コントローラーを次のような controllerAs 構文に更新しました。

angular.module('app')
  .controller('IdeaCtrl', function ($scope, ...) {

    var vm = this;
    ...

このモーダル関数をこの新しい構文にどのように適応させることができますか? 私にとっての課題は、モーダルウィンドウのビューをメインビュー(モーダルなし)でも複数回再利用することです。また、このビューは、「data」ではなく、新しい構文「vm.data」にすでに適応しています。

VM をスコープとして指定しようとしましたが、うまくいきませんでした。どうすればこれを処理できますか?

編集:

関数を次のように変更しました。

vm.openUpdateStateModal = function (nextState, idea) {
  $scope.nextState = nextState;
  $scope.idea = idea;
  $scope.modalWindowOpen = true;

  $scope.modalInstance = $modal.open({
    templateUrl: 'updateStateModal',
    windowClass: 'updateStateModal',
    controller: 'IdeaCtrl as vm',
    scope: $scope
  });

  $scope.modalInstance.result.then(function () {
    $scope.updateState(nextState, idea);
  });

  $scope.modalInstance.result.finally(function () {
    $scope.modalWindowOpen = false;
  });
};

だから私はこの行を追加しました:

controller: 'IdeaCtrl as vm',

今は大丈夫そうです。しかし、スコープから idea 変数と nextstate 変数を使用する必要があります。vm のものも使用するにはどうすればよいですか?

4

2 に答える 2