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);