调整窗口大小时,ng-class 动态不会改变

Posted

技术标签:

【中文标题】调整窗口大小时,ng-class 动态不会改变【英文标题】:ng-class dynamic doesn't change when resize window 【发布时间】:2016-05-16 17:21:13 【问题描述】:

我尝试了带有三元的 ng-class 指令,它在页面加载时效果很好。我的参考是widthWindow.xs变量,当窗口大小是移动时它是“true”,但是有一个resize把它设置为“false”但是类没有改变,ng-class没有动态改变。为什么?

在控制器中:

$scope.myResize = funcion()
   var number = $window.innerWidth;
   if (number > 767) 
      $scope.widthWindow.xs = false;
   else
      $scope.widthWindow.xs = true;
   
;

html中:

<p ng-class="widthWindow.xs ? 'borderVoteNewsTop' : 'borderVoteNewsLeft'">Don't change when there is a resize</p>

【问题讨论】:

【参考方案1】:

ngClass 指令的语法不正确。

如下使用:

<p 
  ng-class="'borderVoteNewsTop': widthWindow.xs, 'borderVoteNewsLeft': !widthWindow.xs"
>
  Change when there is a resize
</p>

查看指令文档:https://docs.angularjs.org/api/ng/directive/ngClass

【讨论】:

这是另一种可能性,但现在使用 $scope.$apply() 可以完美运行。谢谢【参考方案2】:

由于 'resize' 事件来自 Angular 框架之外,您需要将其操作与 AngularJS 摘要循环集成。使用$apply

$scope.myResize = function()
   var number = $window.innerWidth;
   if (number > 767) 
      $scope.$apply("widthWindow.xs = false");
   else
      $scope.$apply("widthWindow.xs = true");
   
;

$apply 执行 Angular 表达式后,会自动调用一个摘要循环,ng-class 指令中的观察者会看到变化并更新类。

【讨论】:

以上是关于调整窗口大小时,ng-class 动态不会改变的主要内容,如果未能解决你的问题,请参考以下文章

允许窗口在转换后动态调整大小

调整窗口大小会导致位图被覆盖

C#,实现窗口大小改变时窗口内的控件自动调整位置和大小时,groupbox内的控件为啥不自动调整

Qt+ECharts开发笔记:Qt窗口动态调整大小,使ECharts跟随Qt窗口大小变换而变换大小

如何在css中动态调整图像大小?

C#,实现窗口大小改变时窗口内的控件自动调整位置和大小时,groupbox内的控件为啥不自动调整??求解