2016-08-11 5 views
0

私はUI-Routerを使用しています。トップナビゲーションバーのリンクを更新して、ユーザーに「戻る」オプションを提供しようとしています。から来るが、論理的なステップは後方にある。つまり、クライアントの編集ページにある場合、戻るボタンはクライアントリストにタスクなどと同じものを持ちます。UI-Routerで角を付けたカスタムバックボタン

ナビゲーションバーは「ルート」定義状態の一部です - トップツールバー@root以下。

.state('root', { 
    abstract: true, 
    url: '', 
    views: { 
     '@': { 
      templateUrl: '../partials/icp_index.html', 
      controller: 'AppController as AppCtrl' 
     }, 
     '[email protected]': { 
      templateUrl: '../partials/left-nav.html' 
     }, 
     '[email protected]': { 
      templateUrl: '../partials/right-nav.html' 
     }, 
     '[email protected]': { 
      templateUrl: '../partials/toolbar.html' 
     } 
    } 
}) 

他の州では、paramsオプションを使用してbackButtonオブジェクトをパディングしています。私のアプリのrunメソッドで

.state('root.tasks.detail', { 
    url: '/:taskId/edit', 
    views: { 
     '[email protected]': { 
      templateUrl: '../partials/edit-task.html', 
      controller: 'TaskDetailController as TaskDetailCtrl' 
     } 
    }, 
    params: { 
     backButton: { 
      text: 'Tasks', 
      route: 'root.tasks' 
     } 
    } 
}) 

次のように、私は、カスタムサービスを呼び出す:

.service('NavigationService', function() { 
    this.updateBackButton = function($state) { 
     var backButton = $state.params.backButton; 
     return backButton; 
    } 
}) 

し、ツールバーで、私が使用:

.run(function($rootScope, NavigationService) { 
    $rootScope.$on("$stateChangeError", console.log.bind(console)); 
    $rootScope.$on("$stateChangeSuccess", function() { 
     $rootScope.backButton = NavigationService.updateBackButton(); 
    }); 
}) 

そして、ここではサービスですbackButtonオブジェクトのrouteプロパティを使用して、ui-srefを次のように定義します。

ui-sref="{{ backButton.route }}" 

しかし、backButtonオブジェクトは更新されていないようです。状態が変わるたびにサービスが確実に実行されます。

私はこれを行うためのより良い方法があるかもしれません感謝
.state('root.clients.dashboard', { 
    url: '/:clientId/dashboard', 
    views: { 
     '[email protected]': { 
      templateUrl: '../partials/client-dashboard.html', 
      controller: 'ClientDetailController as ClientDetailCtrl' 
     } 
    }, 
    params: { 
     backButton: { 
      'text' : 'Clients', 
      'route' : 'root.clients' 
     } 
    } 
}) 

、おそらくなし:なく、私の他のmutliple状態のいずれかで - 次の状態への参照時に

不思議なことに、コードは動作します$ rootScopeを使用すると、名前自体が私のプロパティを変更してはならないと思うようになります!

ご協力いただければ幸いです。

$rootScope.$on('$stateChangeSuccess', function(event, to, toParams, from, fromParams) { 
     $rootScope.previousState = from; 
    }); 
    }]); 

rootScopeはそれで遊ぶことaffraidてはいけないだけでメインの親スコープです:

答えて

0

は、実際には$ rootScopeで簡単に解決策があります。前の状態のローカルストレージでも同じことを実行できます

+0

ありがとう@dmcissokhoしかし、私が言ったように、前の状態を取得しようとはしていませんが、論理的なステップ後方には、バックオプションとしてそれを提供するでしょう。それはテキストプロパティのためのものなので、どこに戻ってくるのかははっきりと知ることができます – DJC

関連する問題