Angular JS Controller在窗口大小调整时查看绑定而不是更新

时间:2014-06-05 14:58:01

标签: angularjs angularjs-scope

请看小提琴: http://jsfiddle.net/HB7LU/4089/

如果您检查控制台,则在窗口调整大小上,$scope.showName会按预期在true和false之间切换。但是视图不会更新。它的初始值为true。 根据我的理解,{{}}ng-bind提供从控制器到视图的1路绑定,因此视图中的值应在控制器中发生更改时更新。

我错过了什么?

5 个答案:

答案 0 :(得分:6)

$scope仅绑定$digest个周期的视图 - 由于没有采取任何操作,您的事件不会触发摘要周期。您必须致电$scope.$apply()以触发视图更新。

警告,$scope.$apply()如果$digest周期已在进行中,可能会抛出错误。

答案 1 :(得分:1)

你缺少对$ scope的调用。$ apply()因为事件是在角度上下文之外处理的,你需要调用$ scope。$ apply()来触发一个摘要,它将更新任何观察者{{3 }}

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();
      });
}

答案 2 :(得分:0)

在Angular事件之外的任何范围操作之后,您需要添加$scope.$apply();。将其添加为bind函数的最后一个语句。

答案 3 :(得分:0)

     missing a call to $scope.$apply()

查看http://jsfiddle.net/HB7LU/4093/

答案 4 :(得分:0)

http://jsfiddle.net/HB7LU/4094/

$scope.$digest();

尝试使用此代码.. 我添加了$ resgest of scope alter resize