web-dev-qa-db-ja.com

angular "$ uibModalInstance.close(data)"はどのように機能しますか?

AngularJSの公式ドキュメントには、_$uibModalInstance.close_がどのように機能するかを説明するものは含まれていません。次のコードフラグメントでは、_scope.close_はモーダルウィンドウを閉じて呼び出し元コントローラーにオブジェクトを渡すために使用されるメソッドです

_var app = angular.module('myApp');

app.controller('ModalController', ['$uibModalInstance', modalControllerFn]);

function modalControllerFn($uibModalInstance) {
    var scope = this;

    // some data object
    scope.data = {key1: "value1", key2: "value2"};

    scope.close = function() {
        $uibModalInstance.close(scope.data);
    }
}
_

質問1)

_$uibModalInstance.close_(非リテラル値、つまり_scope.x_)を使用してモーダルスコープに属するものを渡すことで、angularガベージコレクションがモーダルスコープ全体を破壊するのを防ぎますか?メモリリークを引き起こすシナリオ?

質問2)

angular $uibModalInstance.close(data)はどのように機能しますか?

17
Abdo Adel

JavaScriptの例をご覧くださいAngular UI BootstrapのWebサイト: Angular UI Bootstrap Modal

少し下にスクロールし、[JavaScript]タブをクリックしてコードを表示します。

重要な部分はこれです:

modalInstance.result.then(function (selectedItem) {
  $scope.selected = selectedItem;
}, function () {
  $log.info('Modal dismissed at: ' + new Date());
});

上記のselectedItem変数は、次のものに渡されます。

$uibModalInstance.close(rightHereGetsPassedAsResult)
8
agenaille

var modalInstance = $uibModal.open({template:tmpl, controller: ctrlr})

上記のコードでは、$ uibModal.open()は解決または拒否される約束を返します。

解決したら、ユーザーが「OK」ボタンをクリックすると、後で何かのように実行するステートメントがあるかもしれません。

modalInstance.result.then(function (data) { console.log('user clicked ok', data) })

モーダルインスタンスのコントローラーの$ scopeには、「OK」ボタンのngクリックとしての機能があります。

$scope.ok = function() { $uibModalInstance.close(data); }

$ scope関数で$ uibModalInstance.close(data)に渡すデータは、前述のステートメントのデータ結果として返されます。

3
Angel Santiago