在模板中访问$ state

问题描述 投票:7回答:2

背景

我创建了一个带有左侧菜单的应用程序,其中包含多个菜单项。当用户单击某个项目(或通过URL访问它)时,我要突出显示该项目(即在相应的<li>上应用“活动”类)。

注意:我使用ui.router处理路线。

我尝试了什么

到目前为止,我尝试使用ng-class指令:

<div class="col-sm-3 col-md-2 sidebar">

<ul class="nav nav-sidebar">
  <li ng-class="{active: current=='container.item1'}">
    <a href="#/a/item1">Item 1</a>
  </li>
  <li ng-class="{active: current=='container.item2'}">
    <a href="#/a/item2">Item 2</a>
  </li>
  <li ng-class="{active: current=='container.item3'}">
    <a href="#/a/item3">Item 3</a>
  </li>
</ul>

在js端:

.controller('container', function($scope, $rootScope, $state) {
  $rootScope.$on('$stateChangeSuccess',
      function(){
        $scope.current = $state.current.name;
      }
  )
})

效果很好,但我想知道是否有可能直接在template中引用状态,而不必手动处理事件。类似于:

<ul class="nav nav-sidebar">
  <li ng-class="{active: $state.current.name =='container.item1'}">
    <a href="#/a/item1">Item 1</a>
  </li>
  <li ng-class="{active: $state.current.name =='container.item2'}">
    <a href="#/a/item2">Item 2</a>
  </li>

(不起作用)

任何想法?

angularjs angularjs-scope angular-ui-router state
2个回答
12
投票
.run(['$rootScope', '$state', '$stateParams', function ($rootScope, $state, $stateParams) { $rootScope.$state = $state; $rootScope.$stateParams = $stateParams; }])

然后在任何我们可以访问$state$stateParams的地方,例如在此模板中:

<div >
  <h3>current state name: <var>{{$state.current.name}}</var></h3>


  <h5>params</h5>
  <pre>{{$stateParams | json}}</pre>
  <h5>state</h5>
  <pre>{{$state.current | json}}</pre>

</div>

an example


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.