use*_*751 4 javascript angularjs
当手机的方向发生变化时,我试图隐藏/显示某些内容.
这是我的观点:
<div ng-controller="ModelCtrl">
<p ng-show="isLandscape">Landscape - {{ isLandscape }}</p>
<p ng-show="!isLandscape">Portrait - {{ !isLandscape }}</p>
</div>
Run Code Online (Sandbox Code Playgroud)
这是控制器代码段:
$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);
Run Code Online (Sandbox Code Playgroud)
我能够在方向改变时提醒isLandscape的正确值,但似乎它不会更新视图,所以它总是在"纵向模式 - 真实"中说它.
$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);
Run Code Online (Sandbox Code Playgroud)
一旦你改变了值,Angular就没有办法知道它应该检查值是否已经改变.$scope.$apply将触发一个摘要循环,这将使Angular通知$scope.isLandscape已更改.
更好的解决方案是注入$window控制器并将orientationchange事件监听器添加到控制器中.这样就不需要了$scope.$apply.
| 归档时间: |
|
| 查看次数: |
6719 次 |
| 最近记录: |