Angularjs 为什么在Angular中,`keydown`函数内的$scope更改没有更新DOM
根据下面的控制器,我认为按下Angularjs 为什么在Angular中,`keydown`函数内的$scope更改没有更新DOM,angularjs,Angularjs,根据下面的控制器,我认为按下左键时,应出现和ngShow $scope会进行更新(可以将其视为打印到控制台),但DOM不会更改 但是当我在输入字段中键入某个内容时,就会出现。所以它就像angular没有注意我用keydown所做的更改一样 控制器 .controller('TestCtrl', ['$scope', '$document', function($scope, $document) { var keyboardMap = { 37: 'left'}; $docume
左键时,应出现
和ngShow
$scope
会进行更新(可以将其视为打印到控制台),但DOM不会更改
但是当我在输入
字段中键入某个内容时,
就会出现。所以它就像angular没有注意我用keydown
所做的更改一样
控制器
.controller('TestCtrl', ['$scope', '$document', function($scope, $document) {
var keyboardMap = { 37: 'left'};
$document.on('keydown', function (event) {
var key = keyboardMap[event.which];
if (key) {
console.log('lefty');
$scope.left = true;
}
});
}]);
查看
<div ng-app="TestApp" ng-controller="TestCtrl">
<div ng-show="left" style="height: 100px; width: 100px; border: 1px black solid;"></div>
<input ng-model="something"></input>
</div>
我读了一些其他类似的问题,但没有发现它们有帮助。我确实觉得这里有些东西我不明白
有人知道它为什么不更新吗?我如何使它更新?将代码包装在$apply
块中:
if (key) {
console.log('lefty');
$scope.$apply(function() {
$scope.left = true;
});
}
这将强制从angulars世界之外的事件更新模型
编辑:$scope.$digest()
是另一种方法。有关差异的解释。将代码包装在$apply
块中:
if (key) {
console.log('lefty');
$scope.$apply(function() {
$scope.left = true;
});
}
这将强制从angulars世界之外的事件更新模型
编辑:$scope.$digest()
是另一种方法。有关差异的解释。请执行$digest()
,因为AngularJS对事件的一无所知
函数TestCtrl($scope,$document){
$document.on('keydown',函数(事件){
var键盘映射={
37:‘左’
};
var key=keyboardMap[event.which];
如果(关键){
$scope.left=true;
$scope.$digest()
}
});
}
请执行$digest()
,因为AngularJS对事件的一无所知
函数TestCtrl($scope,$document){
$document.on('keydown',函数(事件){
var键盘映射={
37:‘左’
};
var key=keyboardMap[event.which];
如果(关键){
$scope.left=true;
$scope.$digest()
}
});
}