2016-01-22 3 views
0

У меня есть приложение, в котором у меня есть состояние, которое называется suggestions. Когда я нажимаю кнопку, которая переходит из текущего состояния в состояние suggestions, я хочу добавить класс css в элементы в файле application.html.haml (корень).Найти элемент root ng-class

Так структура выглядит следующим образом,

  • application.html.haml
    • { "щ-вид" => "Frontpage"}
      • % а { "ui- sref "=>" .suggestions», "нг-нажмите"=> "размытие()"}

Таким образом, приложение имеет элемент div с атрибутом view, оно загружает шаблон главной страницы в этом представлении и в этом шаблоне - кнопка, которая вызывает состояние suggestions.

Итак, когда эта кнопка нажата, я хочу добавить класс к элементу в application.html.haml, но я не могу заставить его работать.

В мой контроллер предложений, которые я,

$scope.contentBlur = function(){ 
    $scope.blur = 'blur'; 
} 

В application.html.haml У меня есть

%body{"ng-class" => "blur"} 

Но когда я нажимаю на ссылку, тело не меняется. Однако я положил {"ng-class" => "blur"} внутри шаблона, который загружается, когда введено состояние suggestions.

Возможно, это связано с тем, что элемент %body не подключен к контроллеру предложений (потому что шаблон предложений, а затем он работает).

Таким образом, решение может заключаться в том, чтобы добавить контроллер предложений в элемент body, но это кажется немного грязным. Я надеюсь, что есть способ найти элемент "ng-class" вне контроллера.

ответ

0

Всегда приятно найти ответ на свой вопрос после того, как вы сделали 15 минут исследований.

Изменяя "ng-class" к этому он работает,

{"ng-class" => "{ 'blur': $root.blur=='blur' }"} 
0

Предполагая, что вы используете ui-router, если вы хотите, чтобы присвоить класс вашего тела элемента на основе текущего состояния, рекомендуется использовать $state.includes метод.

Пример (в HTML):

<body ng-controller="BodyController as body" ng-class="{blur: body.state.includes('suggestions')"> 

... и в вашем BodyController:

angular.module('myApp) 
    .controller('BodyController', BodyController); 

function BodyController($state) { 
    var body = this; 
    this.state = $state; 
} 

Метод $state.includes будет обнаружить, если вы находитесь в состоянии ребенка suggestions а также, что могут быть полезны.Если это нежелательно, используйте вместо этого $state.is.