2017-03-23 13 views
0

親状態:angularjs ui-router:状態 "parent"から "parent.firstchild"への移行方法?

var roundsState = { 
    name : 'rounds', 
    url: '/rounds', 
    component: 'rounds', 
    resolve : { 
    rounds : function(RoundsService){ 
     return RoundsService.getRounds(); 
    } 
    } 
}; 

子供の状態:使用しようと

var roundState = { 
    name : 'rounds.round', 
    url: '/{roundUri}', 
    component: 'round', 
    resolve: { 
    round: function(RoundsService, $transition$, $stateParams) { 
     return RoundsService.getRound($transition$.params().roundUri); 
    } 
    } 
}; 

app.run(function($transitions) { 
    $transitions.onSuccess({ to: 'rounds' }, function(trans) { 
    return trans.router.stateService.go('rounds.round'); 
    }); 
}); 

状態 "ラウンド" への移行が成功し、私は国家のために行きたいです"rounds.round"ではなく、最初の子に。私は孫について読んでいたが、私はそれを理解していなかった。私はここで、UI-ルータ1.xの

を使用してい

注plnkr上の実装例です。 http://plnkr.co/edit/0C4aSB3a3fllYxa022Aq?p=preview

答えて

2

。あなたはコンソールを見たことが分かっているかもしれません! :)

だから、私はこのような何かにそれを変更:

trans.router.stateService.go('rounds.round', {roundUri: "firstround"}); 

そして、それは働きます!

Working plunker

EDIT:動的子状態に移動する方法

ui-router v1.0をに)

さて、あなたは$transitions.onSuccess内のことを決めることができます。特定の依存関係を注入して、どこに行くかを決めることができます。このように:

app.run(function($transitions, RoundsService) { 
    $transitions.onSuccess({ to: 'rounds' }, function(trans) { 
    RoundsService.getRounds().then(function(rounds) { 
     return trans.router.stateService.go('rounds.round', {roundUri: rounds[0].uri}); 
    }) 
    }); 
}); 

サービスコールRoundsService.getRounds()を使用して、どの子URIを訪問するかを決定します。

私はrounds.jsonを変更して、他の状態(たとえばroundof16)が最初になるようにしました。そして、それはその状態になります! :)

Updated plunkerダイナミックな子どもの訪問のため。

0

さて私は$の​​状態でこれを使用して、そこにはかなり簡単です:

$state.go('rounds.round', {}); 

実際には必要ないので、実際に$ transition $を使うべきではないと思います。

+0

移行ページごとにui-router 1.xでは、https://ui-router.github.io/guide/ng1/migrate-to-1_0#state-change-eventsを使用する必要があります。とにかく、** $ state.go( 'rounds。{}}; **は** trans.router.stateService.go( 'rounds.round'、{}); **と似ていますが、私が望むのは、ラウンドで最初の子に移行することです。円形 – EddyG

0

あなたのようなstate.js書くことができます:

angular.module('sampleApp') 
    .config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) { 
     $urlRouterProvider.otherwise(function ($injector) { 
      var $state = $injector.get('$state'); 
      $state.go('home'); 
     }); 

     $stateProvider 

      .state('parent', { 
       abstract: true, 
       templateUrl: 'views/parent/index.html' 
      }) 

      .state('child', { 
       parent: 'parent', 
       abstract: true, 
       url: '/child', 
       template: '<ui-view/>' 
      }) 

      .state('child.add', { 
       url: '/add', 
       templateUrl: 'views/child/add.html' 
      }); 
}]); 

をしてからのようなHTMLにアクセス:あなたはrounds.round状態のためroundUriパラメータが欠落している

<a href="#" ui-sref="child.add"><span>Add Child</span></a> 
関連する問題