【发布时间】:2014-07-26 15:30:20
【问题描述】:
请看小提琴: http://jsfiddle.net/HB7LU/4089/
在窗口调整大小上,如果您检查控制台,$scope.showName 会按预期在真假之间切换。但是,视图不会更新。它保持初始值为 true。
据我了解,{{}} 或 ng-bind 提供了从控制器到视图的 1 种方式绑定,因此视图中的值应在控制器中更改时更新。
我错过了什么?
【问题讨论】:
请看小提琴: http://jsfiddle.net/HB7LU/4089/
在窗口调整大小上,如果您检查控制台,$scope.showName 会按预期在真假之间切换。但是,视图不会更新。它保持初始值为 true。
据我了解,{{}} 或 ng-bind 提供了从控制器到视图的 1 种方式绑定,因此视图中的值应在控制器中更改时更新。
我错过了什么?
【问题讨论】:
$scope 仅绑定到 $digest 周期的视图 - 您的事件不会触发摘要周期,因为没有采取任何措施。您必须致电$scope.$apply() 才能触发视图更新。
请注意,如果 $digest 循环已在进行中,$scope.$apply() 可能会引发错误。
【讨论】:
$scope.$apply() 时,这是一个滑坡,有时会变成一场噩梦
您错过了对 $scope.$apply() 的调用,因为该事件是在角度上下文之外处理的,您需要调用 $scope.$apply() 来触发一个摘要,该摘要将更新任何观察者http://jsfiddle.net/HB7LU/4091/
function MyCtrl($scope, $window) {
$scope.name = 'Timothy';
$scope.showName = true
$scope.nickname = 'Tim'
angular.element($window).bind('resize', function() {
if ($scope.showName){
$scope.showName = false;
}
else
{
$scope.showName = true;
}
console.log($scope.showName);
$scope.$apply();
});
}
【讨论】:
您需要在 Angular 事件之外的任何范围操作之后添加 $scope.$apply();。将其添加为bind 函数的最后一条语句。
【讨论】:
missing a call to $scope.$apply()
【讨论】:
【讨论】: