2016-06-30 9 views
0

私は角度jsプロジェクトで抽象ビューを入れ子にしました。
入れ子抽象ビューに移動するとError : Cannot transition to abstract state 'main.middle'が表示されます。
htmlコードは以下の通りです:AngulaJS入れ子抽象ビューに移動

<!DOCTYPE html> 
<html ng-app="nesting"> 

    <head> 
    <script data-require="[email protected]*" data-semver="1.3.0-beta.5" src="https://code.angularjs.org/1.3.0-beta.5/angular.js"></script> 
    <script data-require="[email protected]*" data-semver="0.2.10" src="https://rawgit.com/angular-ui/ui-router/0.2.10/release/angular-ui-router.js"></script> 
    <link rel="stylesheet" href="style.css" /> 
    <script src="script.js"></script> 
    </head> 

    <body ng-controller="testController"> 
    href: 
    <br /> 
    <a href="#/alpha">#/alpha</a> 
    <a href="#/beta">#/beta</a> 
    <a href="#/gama">#/gama</a> 
    <button ng-click="moveToMiddle()">move to middle</button> 
    <br /> 
    ui-sref: 
    <br /> 
    <a ui-sref="main.middle.alpha">main.middle.alpha</a> 
    <a ui-sref="main.middle.beta">main.middle.beta</a> 
    <a ui-sref="main.middle.gama">main.middle.gama</a> 

    <hr /> 
    <div ui-view=""></div> 

    <script> 

     'use strict'; 

     var $urlRouterProviderRef = null; 
     var $stateProviderRef = null; 

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

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

      $urlRouterProvider.otherwise('/alpha'); 


      $stateProvider 
      .state('main', { 
       url: "", 
       abstract: true, 
       template: '<div><h3>Main</h3><div ui-view=""></div></div>', 
      }) 
      .state('main.middle', { 
       url: "", 
       abstract: true, 
       template: '<div><h4>Middle</h4><div ui-view=""></div></div>', 
      }) 
      .state('main.middle.alpha', { 
       url: "/alpha", 
       template: '<div><h5>The leaf: {{state.name}}</h5></div>', 
       controller: function ($scope, $state){ 
        $scope.state = $state.current; 
       }, 
      }) 
      .state('main.middle.beta', { 
       url: "/beta", 
       template: '<div><h5>The leaf: {{state.name}}</h5></div>', 
       controller: function ($scope, $state){ 
        $scope.state = $state.current; 
       }, 
      }) 
      .state('main.middle.gama', { 
       url: "/gama", 
       template: '<div><h5>The leaf: {{state.name}}</h5></div>', 
       controller: function ($scope, $state){ 
        $scope.state = $state.current; 
       }, 
      }) 
      ; 
     });  

     app.controller('testController', function ($scope, $state) { 
      $scope.moveToMiddle = function() { 
      $state.go('main.middle'); 
      } 
     }) 
    </script> 
    </body> 

</html> 

私はエラーを得たmove to middleボタンをクリックします。

抽象ビューに移動する方法を教えてもらえますか?

私はthisを参照していますが、私の場合はそれが役に立たない。

答えて

1

あなたは決してになります。は抽象的な状態になります。 docs

抽象的な状態は子状態を持つことができますが、アクティブ化することはできません。 「抽象的な」状態は、単に遷移することができない状態です。その子孫の1つがアクティブ化されると、暗黙的にアクティブ化されます。

あなたに抽象main.middle.alphamain.middle.beta、およびmain.middle.gamaを定義していない場合は、それらに移行することができます。

+0

このようなシナリオをどのように扱うのか、私はリンクをクリックすると '中間 'に' alpha'、 'beta'と' gama'に 'link'があります。' middle 'view reloaded。 (この場合は 'middle'は' abstract'ではありません) –

+0

申し訳ありませんが、私は完全に理解していません。これらの3つの 'ui-sref'リンクの1つをクリックすると、対応する中間の子状態をロードする必要があります。 –

+0

どのようなシナリオですか?上のコードは抽象として 'main.middle'を持っています。 –

0

angualrドキュメントで述べたように

抽象状態は、子の状態を持つことができますが、 自体を有効に得ることができません。 「抽象的な」状態は単に に移行できない状態です。子孫の のいずれかがアクティブになると、暗黙的にアクティブになります。抽象状態として

app.controller('testController', function ($scope, $state) { 
      $scope.moveToMiddle = function() { 
      $state.go('main.middle.alpha'); 
      } 

インスタンス化することはできませんと表示することはできません。 abstract行を削除する

関連する問題