2016-01-11 1 views
0

Я пытаюсь добавить класс post в мой div #wrap, когда я нахожусь на странице /post. Вот что у меня есть:Angular.js добавить класс к элементу, если на некоторой странице

$ routeProvider

when('/post', { 
    templateUrl : 'views/post.php', 
    controller : 'postCtrl' 
}) 

Контроллер

carolvaladares.controller('postCtrl', function($scope) { 
    $scope.post = true; 
}); 

HTML

<div id="wrap" ng-class="{true: 'post'}[post]"> 

Когда на /post, $scope.post является true. Если $scope.post является true, добавьте класс post к #wrap

Дело в том, что, когда я иду в /post, он не читает $scope.post, если я использую ng-controller="postCtrl" вручную.

Заранее спасибо.

- EDITED -

$scope.post В возвращает true, когда я использую {{post}} на /post. Тем не менее я не могу работать с ng-class.

- EDITED -

проблема все еще происходит потому, что #wrap из моего ng-view. Поэтому я предполагаю, что я пытаюсь сделать, то, что я пытаюсь сделать, будет невозможно.

+0

Загружается ли ваш контроллер при навигации в/post, и я надеюсь, что вы используете ng-view – Thalaivar

+0

Да. Я использую ng-view, и контроллер загружается, когда я перемещаюсь в/post. Я проверил его с помощью простой $ scope.message и {{message}}, чтобы подтвердить это. –

+0

Помог ли мой ответ ... вы получаете сообщение об ошибке консоли? – Thalaivar

ответ

0

Попробуйте

<div id="wrap" ng-class="{'post': post}">

Также не забудьте добавить Ng-контроллер

+0

Он работает, если я использую 'ng-controller =" postCtrl "' вручную на '# wrap'. Таким образом, все остальные страницы также добавят класс 'post'. –

1

Я думаю, что проблема заключается в ваш HTML:

<div id="wrap" ng-class="{ className: post === true }"> 

должен работать.

0

нг-класс работает следующим образом:

ng-class="{'classNameToApply': angularExpression}"

'classNameToApply' будет применяться, когда angularExpression оценивает что-то truthy.

Так что в вашем случае, чтобы применить класс «пост», вы могли бы сделать <div id="wrap" ng-class="{'post': post}">

+0

Он работает, если я использую 'ng-controller =" postCtrl "' вручную на '# wrap'. Таким образом, все остальные страницы также добавят класс 'post'. –

0
<div id="wrap" ng-class="{true: 'post'}[post]"> 

В заявлении вы дали для ng-class должна работать, могли бы вы изменить свою post переменным что-то еще проверить, если его работы, как показано ниже:

<div id="wrap" ng-class="{true: 'post'}[someValue]"> 

Помимо этого, есть и другие решения, ниже которого вы можете попробовать:

Sol1:

<div id="wrap" ng-class="{'post': post}"> 

Sol2

<div id="wrap" ng-class="post ? 'post' : 'somethingelse' }"> 
0

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

when('/post', { 
    templateUrl : 'views/post.php', 
    controller : 'postCtrl', 
    activetab: 'post' 
}) 

и добавить:

<div id="wrap" ng-class="{post: $route.current.activetab == 'post'}"">

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