Angular根据状态添加body类

时间:2015-02-06 15:04:07

标签: javascript angularjs angular-ui-router url-routing angularjs-routing

我有类似的工作

  <body ng-app="ELT" ng-class="{'mapBody': $state.includes('map')}" ng-controller="mainCtrl">

显然,我要做的是添加一个类&#34; mapBody&#34;当州是地图时

和我的控制器一样

  .controller('mainCtrl', ['$scope','$state',function ($scope,$state) {
    'use strict';
    $scope.$state = $state;
  }])

有更好的方法吗?不要因为这个事情我必须有一个新的控制器这一事实,加上它在html中有很多逻辑。

1 个答案:

答案 0 :(得分:0)

根据Radim Kohler,更好的方法是,你可以使用ui-sref-active指令。

当ui-router状态匹配时,将活动类添加到元素

<强> HTML

<body ng-app="ELT" ui-sref-active="mapBody" ng-controller="mainCtrl">
  <a ui-sref="app"></a>
</body>

每当基础ui-sref为当前状态时,if将mapBody类应用于正文。

请参阅Example此处

修改

在你的情况下,你想根据状态将一个类附加到正文, 因此,在这种情况下使用ui-sref-active将无效。因为身体可以包含多个ui-sref并且至少有一个会被满足,所以类总是会附加到身体上。 我相信你目前的做法是正确的。 但我想建议一个改变, 而不是每次都将$state分配给控制器。只在角度run阶段执行一次。

//it will assign a state inside $rootScope and it will get available on each page 
app.run(function($rootScope, $state) { 
  $rootScope.$state = $state;
});

上面的代码会更清晰,每次都会避免在范围内分配$ state。

感谢。