2013-04-08 2 views
0

Я использую AngularJS 1,05AngularJS - установить имя класса, определенного в рамках

Я хотел бы иметь что-то вроде этого:

В мой контроллер:

$scope.location = $location.path().split('/')[2] 
$scope.lang = $routeParams.lang 
$scope.bodyClassName = ((if $scope.location isnt "login" then "sub" else "")) 

Я бы чтобы сообщить эти переменные объекта документа, чтобы получить, например:

<div class="home en sub"></div> 

Я попытался с

<div class="{{location}} {{lang}} {{bodyClassName}}"></div>

Он работает на первой загрузки, но не тогда, когда вид получить обновления.

Как сказано в документации, нг-класс делается оценить выражения, но мне нужно печать переменной.

Каков хороший способ для этого?

ответ

0

Вы можете сделать:

<div class="location + ' ' + lang"></div> 

или

<div class="[ location, lang ].join(' ')"></div> 
4

Вы должны смотреть $location.path() подобрать изменения маршрута и обновления области видимости переменных соответственно:

$scope.$watch(function() { 
    return $location.path(); 
}, function(newPath) { 
    $scope.location = $location.path().split('/')[2] 
    $scope.lang = $routeParams.lang 
    $scope.bodyClassName = ((if $scope.location isnt "login" then "sub" else "")) 
}); 

, а затем , в вашей разметке, как вы пробовали:

<div class="{{location}} {{lang}} {{bodyClassName}}"></div> 

Другой вариант выше - обновить переменные области видимости только на событии успеха изменения маршрута, а не на каждом часе.

+0

Просмотр $ location.path() выглядит неплохо, но он создает проблему с $ digest, поскольку создается новый объект при изменении местоположения. – Laurent

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