2013-06-19 4 views
8

Я уверен, что это снова что-то глупое. Я изучаю angularjs, поэтому я не получаю полный охват, но я добираюсь туда. Я все испробовал и действительно искал все, что мог найти, но ничего не работало.Angularjs rootcope не обновляется ngClass

Я пытаюсь сделать ng-class = "..." в моем файле макета, но выражение установлено в моем контроллере, но каким-то образом оно не отображается. Он отображается, когда я помещаю его в файл ng-view. Я получаю, что он только отображает часть файла, но я хочу, чтобы он также отображал ng-класс на ng-view. Возможно ли это, или проще просто вставить div внутри частичного html-файла.

Простой 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 переменные могут быть доступны в шаблонах AngularJS с помощью $root.<variableName>, поэтому файл HTML должен быть изменен на это:

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

Вы можете увидеть разностное из $scope и $rootScope в этом demo

+5

Почему это не называется " $ rootScope "со стороны html? –

+0

@DavidKarlsson, потому что это уже область. Каждая область имеет атрибут '$ root', указывающий на' $ rootScope', на шаблоне вы получаете некоторую область действия, которая также имеет этот указатель, отсюда и название. Хотя это может быть менее запутанным, если бы оно было переименовано ... – estani

Смежные вопросы