- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在监视键盘事件,特别是向左、向右和 esc。
每个函数都绑定(bind)到一个函数,该函数在页面 Controller 中执行某些作用域函数。
当按下按键时,这些函数确实会被调用,但是,应该在这些函数中更新的范围变量似乎没有执行任何操作。
是否存在范围问题?我将这些输入事件绑定(bind)到 body
是否有问题?
angular.element( document.body ).bind('keydown keypress', function (event)
{
if(event.which === 27) // 27 = esc key
{
$scope.toggleSize();
// $scope.$apply(function() {
// $scope.fullscreen = !$scope.fullscreen;
// });
console.log('scope', $scope.fullscreen);
event.preventDefault();
} else if(event.which === 37) {
console.log('next');
$scope.goToNextSection('currentSection', $scope.slides);
} else if(event.which === 39) {
console.log('prev');
$scope.goToPreviousSection('currentSection', $scope.slides);
}
});
最佳答案
Angular 仅在摘要循环运行时更新绑定(bind)到范围的内容。大多数时候,Angular 会自动触发摘要以响应某些事件。如果不是这种情况,您需要自己做。这正是这里发生的事情。
当您使用 jqLite/jQuery 监听 DOM 事件时,您需要告诉 Angular 在您更改范围内的某些内容后触发摘要。为此,只需调用 $apply()方法:
angular.element( document.body ).bind('keydown keypress', function (event)
{
if(event.which === 27) // 27 = esc key
{
$scope.$apply(function() {
$scope.toggleSize();
});
console.log('scope', $scope.fullscreen);
event.preventDefault();
} else if(event.which === 37) {
$scope.$apply(function() {
$scope.goToNextSection('currentSection', $scope.slides);
});
console.log('next');
} else if(event.which === 39) {
$scope.$apply(function() {
$scope.goToPreviousSection('currentSection', $scope.slides);
});
console.log('prev');
}
});
我建议您阅读更多有关作用域和摘要周期的内容。 Angular 文档本身是 good start .
最后,我不确定您是否在 Controller 中监听 DOM 事件。如果是,您可能应该使用指令。
关于javascript - Angular 击键观察器未正确更新范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29593715/
menu Home Events Technical Schedule
我试图阻止触发默认 anchor 链接和 onclick 事件。 这是 HTML 代码: Google 我正在尝试使用以下 jQuery 代码阻止任何重定向的发生: $("#mylink").cli
我想在单击父 div 上的任意位置时切换我的 div,除非单击 anchor 元素。因此,例如,如果我单击示例中的第一个文本,我希望它切换,但在我的示例中的第二个文本上,我不希望它切换。 JSFidd
我在通过 jQuery 伪造 anchor 点击时遇到问题:为什么我的thickbox在我第一次点击输入按钮时出现,但第二次或第三次却没有出现? 这是我的代码: Link 当我直接点击链接时,它总是
我已经从 Mootools 切换到 jQuery,因为我认为它有更好的支持。我有这样的 HTML: Opcje Opcje Opcje Opcje Opcje Opcje Opcje JS
我是一名优秀的程序员,十分优秀!