Angularjs在窗口大小调整时更改范围变量

Mat*_*yev 4 javascript scope angularjs

我正在尝试更改范围变量:$scope.tab每次窗口调整大小时$scope.tab == 'more'.

码:

$scope.closeMoreTab = function() {
    if($scope.tab == 'more')
        $scope.tab = 'extras';
};

angular.element($window).bind('resize', function() {
    $scope.closeMoreTab();
});
Run Code Online (Sandbox Code Playgroud)

好吧,它确实在调用$scope.closeMoreTab(),而且它确实在改变$scope.tab变量,但实际上,它并没有改变视图上的任何内容.

我试过了:

console.log($scope);
Run Code Online (Sandbox Code Playgroud)

要检查变量tab,它确实变为'extras',但是当我这样做时:

<div>{{ tab }}</div>
Run Code Online (Sandbox Code Playgroud)

它告诉我,当前的tab变量仍然是"更多"

请帮忙.我坚持了1个小时,不知道为什么会这样或者做什么.

非常感谢

小智 6

你应该换你$scope.closeMoreTab();进入$scope.$apply的功能,因为这目前值发生变化,但不会触发消化周期:

angular.element($window).bind('resize', function() {
    $scope.$apply(function() {
        $scope.closeMoreTab();
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 使用`$ timeout`而不是`$ scope.$ apply`更安全.`$ scope.$ apply`可以导致消化问题. (2认同)