无法过渡到抽象状态(angular-ui-router)

时间:2017-02-21 15:37:43

标签: javascript angularjs angular-ui-router

https://plnkr.co/edit/5JhQx64WF3tgdm02qKzJ?p=preview

enter image description here

我所做的一切都打破了我的应用程序删除了ui-sref(我从不喜欢使用它)并在Javascript内部使用$state.go

<tr ng-repeat="ticker in tickers">
  <!--<td>{{ ticker }} <button ui-sref="dash.tags({ticker: ticker})">Click Me</button></td>-->
  <td>{{ ticker }} <button ng-click="clickTicker(ticker)">Click Me</button></td>
</tr>
$scope.clickTicker = function(ticker) {
  $state.go('dash', { ticker: ticker });
}

如果我的父级abstract: true状态对象中没有dashboard,那么由于某种原因,我的TagsList组件会消失。

以下完整代码:

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

routerApp.config(function($stateProvider, $urlRouterProvider) {

    $urlRouterProvider.otherwise('/dash?AAA');

    var dash = {
      name: 'dash',
      url: '/dash',
      abstract: true,
      views: {
        '': { templateUrl: 'dashboard.html' },
        'tickersList@dash': {
          templateUrl: 'tickers-list.html',
          controller: 'tickersController'
        },
        'alertsList@dash': {
          controller: 'alertsController',
          templateUrl: 'alerts-list.html',
        }
      }
    };

    var tickers = {
      name: 'dash.tickers',
      url: '?ticker',
      params: {
        ticker: 'AAA'
      },
      views: {
        'tickersList@dash': {
          templateUrl: 'tickers-list.html',
          controller: 'tickersController'
        }
      }
    }

    var tags = {
      name: 'dash.tags',
      url: '?ticker',
      params: {
        ticker: 'AAA'
      },
      views: {
        'tagsList@dash': {
          templateUrl: 'tags-list.html',
          controller: 'tagsController'
        }
      }
    }

    $stateProvider
      .state(dash)
      .state(tags)

});

routerApp.controller('tagsController', function($scope, $state, $stateParams) {
    $scope.ticker = $state.params.ticker;

    function getList(ticker) {
      switch(ticker) {
          case 'AAA' : return ['aaa tag 1', 'aaa tag 2', 'aaa tag 3'];
          case 'BBB' : return ['bbb tag 1', 'bbb tag 2', 'bbb tag 3'];
          case 'CCC' : return ['ccc tag 1', 'ccc tag 2', 'ccc tag 3'];
      } 
    }

    $scope.tags = getList($state.params.ticker);

    this.$onInit = function() {
      console.log('onInit tagsController');
    };
});

routerApp.controller('tickersController', function($scope, $state) {
    $scope.tickers = [
      'AAA', 'BBB', 'CCC'
    ];

    $scope.clickTicker = function(ticker) {
      $state.go('dash', { ticker: ticker });
    }

    this.$onInit = function() {
      console.log('onInit tickersController', $state.params.ticker);
    };
});

routerApp.controller('alertsController', function($scope, $state) {
    this.$onInit = function() {
      console.log('onInit alertsController', $state.params.ticker);
    };
});

1 个答案:

答案 0 :(得分:1)

使用$state.go,您转到/dash?ticker=ticker,但/dash是一个抽象状态,因此这就是您收到错误的原因。

您的tickerstags州的网址定义不正确。您可能想要url: 'tickers?ticker'