AngularJS - ng-show,范围变量不起作用

时间:2015-02-11 15:44:28

标签: javascript angularjs

当手机的方向发生变化时,我试图隐藏/显示某些内容。

以下是我的观点:

<div ng-controller="ModelCtrl">
    <p ng-show="isLandscape">Landscape - {{ isLandscape }}</p>
    <p ng-show="!isLandscape">Portrait - {{ !isLandscape }}</p>
</div>

这是控制器片段:

    $scope.isLandscape = false;

    // Listen for orientation changes
    window.addEventListener("orientationchange", function() {
        // Announce the new orientation number
        switch(window.orientation) 
        {  
          case -90:
          case 90:
            $scope.isLandscape = true;
            alert($scope.isLandscape);
            break; 
          default:
            $scope.isLandscape = false;
            alert($scope.isLandscape);
            break; 
        }
    }, false);

我能够在方向更改时提醒isLandscape的正确值,但似乎它不会更新视图,因此它总是说它处于&#34;纵向模式 - true&#34;。

1 个答案:

答案 0 :(得分:8)

你是missing a $scope.$apply()

$scope.isLandscape = false;

// Listen for orientation changes
window.addEventListener("orientationchange", function() {
    // Announce the new orientation number
    switch(window.orientation) 
    {  
      case -90:
      case 90:
        $scope.isLandscape = true;
        $scope.$apply(); // <--
        break; 
      default:
        $scope.isLandscape = false;
        $scope.$apply(); // <--
        break; 
    }
}, false);

一旦更改了值,Angular就无法知道它应该检查值是否已更改。 $scope.$apply会触发摘要循环,这会使Angular注意到$scope.isLandscape已更改。


更好的解决方案是将$window注入您的控制器,并将orientationchange事件侦听器添加到其中。这样就不需要$scope.$apply