当手机的方向发生变化时,我试图隐藏/显示某些内容。
以下是我的观点:
<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;。
答案 0 :(得分:8)
$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
。