1
的广播事件后未在视图中更新我已经阅读过类似的问题,我无法指出为什么这不会更新。我可以在catch事件上获取范围变量的日志。但它没有更新视图。所以它填充“测试”,但不会更新$ scope.keyPressed更新时。
指令
app.directive('keypressEvents', [
'$document',
'$rootScope',
function($document, $rootScope) {
return {
restrict: 'A',
link: function() {
$document.bind('keypress', function(e) {
console.log('Got keypress:', e.which);
// console.log('document', $document)
$rootScope.$broadcast('keypress', e);
$rootScope.$broadcast('keypress:' + e.which, e);
});
}
};
}
]);
控制器
$scope.keyPressed = 'test';
$scope.$on('keypress:13', function(onEvent, keypressEvent) {
$scope.keyPressed = 'Enter';
console.log($scope.keyPressed);
});
// For listening to all keypress events
$scope.$on('keypress', function(onEvent, keypressEvent) {
if (keypressEvent.which === 120) {
$scope.keyPressed = 'x';
}
else {
console.log('else' ,keypressEvent);
$scope.keyPressed = 'Keycode: ' + keypressEvent.which;
}
});
<div data-keypress-events>
{{keyPressed}}
</div>
为视图控制器由路径提供程序时加载的部分所指示的视图。
.when('/feed/:url', {
templateUrl: '/templates/eventWall-feed',
controller: 'eventWallFeedController'
})
谢谢。真正搞砸了我的是我从另一个问题得到了指令片断。它只是毁了我为什么不能更新。为什么其他$ scope变量会被更新。就像在ajax调用的回调函数中,我可以更新.then函数中的$ scope变量,并且它会更新。但在这里我必须打电话给$ apply? –
我觉得因为$ broadcast和$ on有可能被多次运行,并且如果它每次都运行一个摘要循环,将会妨碍性能。这是我最好的猜测。 – Ronnie