17

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);
    }
}

问题(一)

使用`$uibModalInstance.close`(非文字值,即:`scope.x`)传递属于模态范围的任何内容是否会阻止角度垃圾收集破坏整个模态范围?这是导致内存泄漏的情况吗?

问题2)

angular `$uibModalInstance.close(data)` 究竟是如何工作的?
4

2 回答 2

10

请在此处查看 Angular UI Bootstrap 网站上的 JavaScript 示例: 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)
于 2016-04-20T02:51:20.737 回答
3

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

在上面的代码中 $uibModal.open() 返回一个被解决或拒绝的承诺。

如果解决了,当用户点击你的“确定”按钮时,你可能会有一个声明,之后会做一些事情,比如..

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

在您的模态实例的控制器的 $scope 上,您将拥有一个功能,作为您的“确定”按钮的 ng-click

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

您在 $scope 函数中传递给 $uibModalInstance.close(data) 的数据将作为上述语句中的数据结果返回。

于 2018-09-19T19:28:28.697 回答