当$ state.current.name是某个值时,Angular.js:ng-show元素

Mat*_*att 17 javascript angularjs

我期待只在$state.current.name等于时显示一个HTML块about.list.到目前为止,我有以下代码,但它似乎并没有根据状态切换元素.

的index.html

<nav class="global-navigation">
    <ul class="list">
    <li class="list-item">
      <a class="list-item-link" ui-sref="home">
        Home
      </a>
    </li>
    <li class="list-item">
      <a class="list-item-link" ui-sref="about">
        About
      </a>
    </li>
     <li class="list-item" ng-show="$state.current.name == 'about.list'">
      <a class="list-item-link" ui-sref="about.list">
        List
      </a>
    </li>
    </ul>
  </nav>
Run Code Online (Sandbox Code Playgroud)

app.js

var myApp = angular.module('myApp', ['ui.router'])

  .config(['$urlRouterProvider', '$stateProvider', 

    function($urlRouterProvider, $stateProvider) {

    $urlRouterProvider.otherwise('/404.html');

    $stateProvider.

      // Home
      state('home', {
        url: '/',
        templateUrl: 'partials/_home.html',
        controller: 'homeCtrl'
      }).

      // About
      state('about', {
        url: '/about',
        templateUrl: 'partials/_about.html',
        controller: 'aboutCtrl'
      }).

      // About List
      state('about.list', {
        url: '/list',
        controller: 'aboutCtrl',
        templateUrl: 'partials/_about.list.html',
        views: {
          'list': { templateUrl: 'partials/_about.list.html' }
        }
      });

  }]

);
Run Code Online (Sandbox Code Playgroud)

dev*_*ide 34

您可以使用isStateincludedByState等过滤器.

ng-if="'about.list' | isState" // exactly 'about.list'

ng-if="'about' | includedByState" // works for about and its children about.*
Run Code Online (Sandbox Code Playgroud)

  • 这是目前最好的解决方案,谢谢! (7认同)

Whi*_*her 26

要么

JS

.run(function ($state,$rootScope) {
    $rootScope.$state = $state;
})
Run Code Online (Sandbox Code Playgroud)

HTML

data-ng-show="$state.includes('about.list')"
Run Code Online (Sandbox Code Playgroud)


Sun*_* D. 11

视图(html)不知道变量$state.它只知道$scope与视图相关联的内容.

您可以$state$scope与此视图关联的控制器内部公开变量(您可能还必须将$ state注入控制器):

$scope.uiRouterState = $state;
Run Code Online (Sandbox Code Playgroud)

然后稍微更改标记中的表达式:

<li class="list-item" ng-show="uiRouterState.current.name == 'about.list'">
Run Code Online (Sandbox Code Playgroud)