Javascript 在ui引导模式中的模式中定义的调用函数

Javascript 在ui引导模式中的模式中定义的调用函数,javascript,angularjs,angular-ui-bootstrap,bootstrap-modal,Javascript,Angularjs,Angular Ui Bootstrap,Bootstrap Modal,在我的ui引导模式控制器中,I$watch变量。它看起来像这样: main.controller('modalCtrl',['$scope','$rootScope','$modalInstance',', 函数($scope、$rootScope、$modalInstance){ var unregister=$rootScope.$watch(函数(){return$rootScope.someVariable;}, 函数(newVal){ 如果(newVal==false){ $scop

在我的ui引导模式控制器中,I$watch变量。它看起来像这样:

main.controller('modalCtrl',['$scope','$rootScope','$modalInstance',',
函数($scope、$rootScope、$modalInstance){
var unregister=$rootScope.$watch(函数(){return$rootScope.someVariable;},
函数(newVal){
如果(newVal==false){
$scope.closeModal();
}
});
$scope.closeModal=函数(){
注销();
$modalInstance.disclose('cancel');
};

}]);只需在
结果
承诺中添加一个回调,然后使用
取消注册

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

在这种情况下,
closeModal
和escape键都会调用
unregister
。顺便说一句,您可以将
$scope.closeModal
全部去掉,在模板中使用
ng click=“$disease('cancel')”

首先,您真的不应该在
$rootScope
上存储任何内容,尤其是用于关闭模式的监视变量。你想通过一些被关注的变量来关闭你的模态,从而试图解决什么问题(以及你想要实现什么用户体验)?这对我来说没有通过嗅觉测试,而且你的设计有些奇怪

其次,你关于不想使用已解决的承诺的说法没有意义。调用
$modal.open(options)
时,返回一个对象,比如
modalInstance
,然后调用promise回调。因此,promise回调与您的
modalInstance
以及您可能通过
options
传递的任何数据存在于相同的上下文中


有关如何正确使用
$modal
服务的示例,请参阅我们的文档。

非常感谢。我不知道$modalInstance有结果承诺。我认为result promise只在父范围内的modal变量上。
$modalInstance
$modal.open
返回的。