コントローラとアンギュラブートストラップ$モード間のデータの共有

StackOverflow https://stackoverflow.com//questions/25047180

  •  21-12-2019
  •  | 
  •  

質問

Angular-Bootstrap $ Modalを使用しています。コントローラとモードの間でデータを共有する方法を理解しています。

コントローラ:

app.controller 'MainController', ($scope, $templateCache) ->      
  $scope.openModal = ->
    modal = $modal.open(
      template: $templateCache.get('modal.html')
      controller: modalController
      size: 'sm'
      resolve:
        repository: ->
          $scope.repository
    )
.

モーダル:

modalController = ($scope, $modalInstance, repository) ->
  $scope.repository = repository

  $scope.update = (other_repo) ->
    $scope.repository = other_repo  
    $modalInstance.dismiss('cancel')
.

この時点でMainControllerからの$scope.repositoryをモーダルから変化すると更新されますが、そうではありません。

私は何が足りないの?

ありがとう

役に立ちましたか?

解決

モーダルコントローラには、モーダルを開けたコントローラとは異なるスコープがあります。閉じると、ドキュメント

modal = $modal.open(...);

modal.result.then(function (otherRepo) {
  $scope.repository = otherRepo;
}
.

他のヒント

コントローラのスコープを$ MODALに渡していない場合は、$ ROOTSCOPE:var modalScope = (modalOptions.scope || $rootScope).$new();からプロトタイプ状に継承され、これからOpenerのコントローラスコープへの接続はありません。 しかし、それを開くコントローラのモーダルスコープに渡すことができます:

  $scope.open = function (size) {
    var modalInstance = $modal.open({
      templateUrl: 'myModalContent.html',
      controller: ModalInstanceCtrl,
      size: size,
      scope: $scope
    });
.

今回は、ModalInstanceCtrlのスコープは親コントローラの範囲を継承し、すべての変更はOpener Controllerのスコープに反映されます。

このプランクを見る(Bootstrap-UIからわずかに変更されたサンプル) Opener ScopeからのselectedオブジェクトModalで更新され、この更新プログラムはModalDemoCtrlコントローラのビューで直ちに反映されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top