【问题标题】:Access $state inside template访问模板内的 $state
【发布时间】:2015-10-08 16:14:35
【问题描述】:

背景

我创建了一个左侧菜单的应用程序,其中包含多个菜单项。当用户单击一个项目(或通过 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;
      }
  )
})

效果很好,但我想知道是否可以直接在 模板 中引用状态,而无需手动处理事件。类似的东西:

<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


    【解决方案1】:

    简单的方法是使用这个:

    .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

    【讨论】:

    • 对这种集中导航功能的方法非常感兴趣。谢谢拉迪姆
    猜你喜欢
    • 2017-07-20
    • 2021-10-10
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2011-08-26
    相关资源
    最近更新 更多