Javascript 在ui引导模式中的模式中定义的调用函数
在我的ui引导模式控制器中,I$watch变量。它看起来像这样: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
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
返回的。