Javascript Angular UI引导弹出框-如何使用ESC关闭弹出框

Javascript Angular UI引导弹出框-如何使用ESC关闭弹出框,javascript,angularjs,angular-ui-bootstrap,popover,Javascript,Angularjs,Angular Ui Bootstrap,Popover,我搜索了问题和答案,尝试了不同的方法(例如,$(“#元素”).popover('hide')),但我仍然无法用ESC按钮关闭引导式popover 我(错误地)认为这应该行得通 $(document).keyup(function (event) { if (event.which === 27) { alert( "esc"); $scope.isOpen = false; } }); ,但事实并非如此 我准备好了 非常感谢 首先,将逻辑移动到控制器。然

我搜索了问题和答案,尝试了不同的方法(例如,
$(“#元素”).popover('hide')
),但我仍然无法用ESC按钮关闭引导式popover

我(错误地)认为这应该行得通

$(document).keyup(function (event) {
    if (event.which === 27) {
      alert( "esc");
      $scope.isOpen = false;
    }
});
,但事实并非如此

我准备好了


非常感谢

首先,将逻辑移动到控制器。然后添加
$scope.$apply()
强制执行
$digest
循环(您使用的是
jQuery
,它是第三方,而不是角度内置机制)

像这样:

控制器

$(document).keyup(function (event) {
        if (event.which === 27) {
          $scope.isOpen = false;
          $scope.$apply();
       }
    });

首先,将逻辑移到控制器上。然后添加
$scope.$apply()
强制执行
$digest
循环(您使用的是
jQuery
,它是第三方,而不是角度内置机制)

像这样:

控制器

$(document).keyup(function (event) {
        if (event.which === 27) {
          $scope.isOpen = false;
          $scope.$apply();
       }
    });

正如Aran所说,这与消化周期问题有关,因为angular无法检测到变化

这是一个正在工作的plunker:

确保使用$scope.$digest,因为它将自动强制执行$apply

$scope.save = function () {
  $scope.isOpen = false;
  $scope.$digest();
};

$(document).keyup(function (event) {
    if (event.which === 27) {
      $scope.save();
    }
});

正如Aran所说,这与消化周期问题有关,因为angular无法检测到变化

这是一个正在工作的plunker:

确保使用$scope.$digest,因为它将自动强制执行$apply

$scope.save = function () {
  $scope.isOpen = false;
  $scope.$digest();
};

$(document).keyup(function (event) {
    if (event.which === 27) {
      $scope.save();
    }
});

是否仅在按esc键时关闭?其他关闭弹出框的方法(单击外部按钮等)正在运行。因此,在这里按esc键就足够了,谢谢。请检查plunker以查看它是否工作。ng-keypress可能是一个选项to是否只想在按esc键时关闭它?关闭弹出框的其他方法(单击外部、按钮等)正在工作。因此,在这里关闭esc键就足够了,谢谢。请检查plunker以查看它是否工作。ng-keypress可能也是一个选项