2013-06-19 38 views
8

我很确定这又是一件愚蠢的事情。我正在学习angularjs,所以我没有得到完整的范围,但我到了那里。我尝试了一切,并真正寻找我能找到的任何东西,但似乎没有任何工作。Angularjs rootcope不更新ngClass

我想在我的布局文件中做一个ng-class =“...”,但表达式在我的控制器中设置,但不知何故它不呈现。当我把它放在我的ng-view文件中时,它会被渲染。我得到他只渲染了部分文件,但我希望他也可以在ng-view上渲染ng-class。这是可能的,或者只是在部分HTML文件中放入一个div更容易。

简单的HTML文件

<body> 
<ng-view ng-class="{ 'splash': splash=='splash' }"></ng-view> 
</body> 

我控制器

angular.module('xxx.splash') 
    .controller('IndexCtrl', function($scope, $rootScope, config) { 
     $rootScope.splash = 'splash'; 

     $scope.login = function(e) { 
      alert('Soon. How soon? Very soon.'); 
     } 
    }); 

回答

31

当你在根范围内定义一个变量,你不能访问它以同样的方式,你在本地定义它范围。 $rootScope变量可以在使用$root.<variableName>的AngularJS模板访问,所以你的HTML文件应该被更改为此:

<body> 
<ng-view ng-class="{ 'splash': $root.splash=='splash' }"></ng-view> 
</body> 

你可以看到$scope$rootScope之探源这个demo

+5

为什么不叫“ $ rootScope“的HTML端? –

+0

@DavidKarlsson,因为它已经是一个范围。每个作用域都有一个属性'$ root',指向模板上的'$ rootScope',你会得到一个也有这个指针的作用域,因此也就是名称。尽管将它重新命名可能不那么令人困惑...... – estani