Javascript AngularJS-ng显示范围变量不起作用

Javascript AngularJS-ng显示范围变量不起作用,javascript,angularjs,Javascript,Angularjs,当手机方向改变时,我试图隐藏/显示某些东西 以下是我的看法: <div ng-controller="ModelCtrl"> <p ng-show="isLandscape">Landscape - {{ isLandscape }}</p> <p ng-show="!isLandscape">Portrait - {{ !isLandscape }}</p> </div> 我可以在方向更改时提醒isLan

当手机方向改变时,我试图隐藏/显示某些东西

以下是我的看法:

<div ng-controller="ModelCtrl">
    <p ng-show="isLandscape">Landscape - {{ isLandscape }}</p>
    <p ng-show="!isLandscape">Portrait - {{ !isLandscape }}</p>
</div>
我可以在方向更改时提醒isLandscape的正确值,但它似乎不会更新视图,因此它总是在“纵向模式-真实”下显示它的值。

您是:

$scope.isLandscape=false;
//倾听方向的变化
addEventListener(“方向更改”,函数(){
//宣布新的定向号码
开关(窗口方向)
{  
案例-90:
案例90:
$scope.isLandscape=true;

$scope.$apply();//另外,您应该使用
$window
服务。感谢您的澄清!为什么我们必须指示Angular查找更改?如果我们包含类似{{isLandscape}的内容在我们的页面中,它将在发生更改时响应更改。为什么ng show不以类似方式响应更改?@RussJackson我已更新了答案,以包含一个不需要显式
$scope.$apply
。需要
$scope.$apply
,因为如果使用本机浏览器,Angular不会执行任何脏检查(或jQuery、mootools、d3等)事件侦听器并更改普通javascript对象。但是,在ES6和Angular 2.0中,这可能会随着
ObjectProxies
而更改。请继续关注!
    $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);
$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);