ng-class表达式更新或解决方法

时间:2013-12-20 17:38:35

标签: javascript angularjs

我有一个ng-class="{minifyClass: minifyCheck}"的div。

在我的控制器中,如果它们发生变化,我会看两个参数。 $window.outerHeight$('#eventModal > .modal-dialog').height()。如果他们改变了,我打电话给minifyChange()来做事。

function minifyChange(){
    if( $('#eventModal > .modal-dialog').height()+75 < $window.outerHeight ){
        $scope.minifyCheck = true;
    }else{
        $scope.minifyCheck = false;
    }
    //$scope.$digest();
}


$scope.$watch(function () {
   return $('#eventModal > .modal-dialog').height()
},function(){ return minifyChange() }, true)

$scope.$watch(function () {
   return $window.outerHeight;
},function(){ return minifyChange() }, true)

$scope.$digest()发表评论后,我必须“等待”,直到下一个$scope.$digest()$scope.$apply()发生,以便minifyClass根据{{1}添加或删除我的价值。 “等待”并不能提供最佳的用户体验。

如果我注释掉minifyCheck,我会收到错误消息,$ digest已在进行中:

错误:[$ rootScope:inprog] http://docs.angularjs.org/error/ $ rootScope:inprog?p0 = $ digest

我的角度代码非常复杂,看看以前运行的摘要是什么,但这里是完整的错误:

$scope.$digest()

我的问题:有没有办法更新类以避免错误?也许我想念另一个角度函数?或者,如果无法避免使用$ digest,我如何跟踪正在运行的其他摘要,以便我可以调试它?

1 个答案:

答案 0 :(得分:0)

如果将DOM访问权限留给指令而不是控制器,那么总是更好。我建议你做以下事情。

创建一个监视element.height()和$ window.height()的指令。 (您可以找到示例here)。另请阅读How (not) to watch element size changes

每当触发监视功能时,计算minifyCheck的值。希望这会有所帮助。