在 ui-bootstrap 模态关闭时调用模态中定义的函数
Call function defined in modal on ui-bootstrap modal dismiss
在我的 ui-bootstrap 模态控制器中我 $watch 变量。它看起来像这样:
main.controller('modalCtrl', ['$scope', '$rootScope', '$modalInstance',
function ($scope, $rootScope, $modalInstance) {
var unregister = $rootScope.$watch(function () { return $rootScope.someVariable; },
function (newVal) {
if (newVal == false) {
$scope.closeModal();
}
});
$scope.closeModal = function () {
unregister();
$modalInstance.dismiss('cancel');
};
}]);
当我关闭模态时,我想取消注册 $watch,当我在 HTML 中的 ng-click="closeModal()" 上这样做时,它工作正常。但是,当我在 ESC 上单击模态外部时关闭模态时,它不起作用。那么有什么办法可以在解雇时调用我的取消注册功能。我知道 modal.result.then(close(),dismiss());但如果没有必要,我不想将该函数放入父级 $scope。
再添加一个回调到 result
promise unregister
:
main.controller('modalCtrl', ['$scope', '$rootScope', '$modalInstance', function ($scope, $rootScope, $modalInstance) {
var unregister = $rootScope.$watch(function () {
return $rootScope.someVariable;
}, function (newVal) {
if (newVal == false) {
$scope.closeModal();
}
});
$scope.closeModal = function () {
$modalInstance.dismiss('cancel');
};
$modalInstance.result.then(null, unregister);
}]);
在这种情况下,unregister
将在 closeModal
和退出键上调用。顺便说一下,你可以把 $scope.closeModal
一起去掉,在模板中使用 ng-click="$dismiss('cancel')"
代替。
首先,您真的不应该在 $rootScope
上存储任何内容 - 特别是用于关闭模态的监视变量。你想通过一些监视变量关闭你的模态来解决什么问题(以及你想要完成什么用户体验)?这对我来说没有通过气味测试,而且您的预期设计有些奇怪。
其次,您关于不想使用已解决承诺的说法没有意义。当你调用 $modal.open(options)
时,那个 returns 一个对象,说 modalInstance
然后你调用你的承诺回调。因此,promise 回调存在于与您的 modalInstance
以及您可能通过 options
.
传递的任何数据相同的上下文中
有关如何正确使用 $modal
服务的示例,请参阅我们的文档 here。
在我的 ui-bootstrap 模态控制器中我 $watch 变量。它看起来像这样:
main.controller('modalCtrl', ['$scope', '$rootScope', '$modalInstance',
function ($scope, $rootScope, $modalInstance) {
var unregister = $rootScope.$watch(function () { return $rootScope.someVariable; },
function (newVal) {
if (newVal == false) {
$scope.closeModal();
}
});
$scope.closeModal = function () {
unregister();
$modalInstance.dismiss('cancel');
};
}]);
当我关闭模态时,我想取消注册 $watch,当我在 HTML 中的 ng-click="closeModal()" 上这样做时,它工作正常。但是,当我在 ESC 上单击模态外部时关闭模态时,它不起作用。那么有什么办法可以在解雇时调用我的取消注册功能。我知道 modal.result.then(close(),dismiss());但如果没有必要,我不想将该函数放入父级 $scope。
再添加一个回调到 result
promise unregister
:
main.controller('modalCtrl', ['$scope', '$rootScope', '$modalInstance', function ($scope, $rootScope, $modalInstance) {
var unregister = $rootScope.$watch(function () {
return $rootScope.someVariable;
}, function (newVal) {
if (newVal == false) {
$scope.closeModal();
}
});
$scope.closeModal = function () {
$modalInstance.dismiss('cancel');
};
$modalInstance.result.then(null, unregister);
}]);
在这种情况下,unregister
将在 closeModal
和退出键上调用。顺便说一下,你可以把 $scope.closeModal
一起去掉,在模板中使用 ng-click="$dismiss('cancel')"
代替。
首先,您真的不应该在 $rootScope
上存储任何内容 - 特别是用于关闭模态的监视变量。你想通过一些监视变量关闭你的模态来解决什么问题(以及你想要完成什么用户体验)?这对我来说没有通过气味测试,而且您的预期设计有些奇怪。
其次,您关于不想使用已解决承诺的说法没有意义。当你调用 $modal.open(options)
时,那个 returns 一个对象,说 modalInstance
然后你调用你的承诺回调。因此,promise 回调存在于与您的 modalInstance
以及您可能通过 options
.
有关如何正确使用 $modal
服务的示例,请参阅我们的文档 here。