2013-06-19 11 views
8

Jestem prawie pewien, że to znowu głupota. Uczę się angularów, więc nie mam jeszcze pełnego zakresu, ale dotarłem tam. Próbowałem wszystkiego i naprawdę szukałem wszystkiego, co mogłem znaleźć, ale nic nie działało.rootcope Angularjs nie aktualizuje ngClass

Próbuję zrobić ng-class = "..." w moim pliku układu, ale wyrażenie jest ustawione w moim kontrolerze, ale jakoś nie jest renderowane. Jest renderowany, kiedy umieszczam go w moim pliku widoku. Rozumiem, że on tylko renderuje część pliku, ale chcę, żeby on również wyrenderował klasę ng na ng-view. Czy jest to możliwe, czy łatwiej jest po prostu wstawić div do częściowego pliku html.

Prosty plik html

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

Mój kontroler

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

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

Odpowiedz

31

Po zdefiniowaniu zmiennej w zakresie głównego, nie można do niego dostęp w taki sam sposób, jak zdefiniować go w lokalnym zakres. $rootScope zmienne mogą być dostępne w szablonach angularjs korzystających $root.<variableName>, więc plik HTML, który powinien zostać zmieniony tak:

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

Można zobaczyć roznicy z $scope i $rootScope w ten demo

+5

Dlaczego nie nazywa się " $ rootScope "po stronie html? –

+0

@DavidKarlsson, ponieważ jest już zasięgiem. Każdy zakres ma atrybut '$ root' wskazujący na' $ rootScope' na szablonie, do którego masz zasięg, który również ma ten wskaźnik, stąd nazwa. Chociaż zmiana nazwy może być mniej myląca ... – estani