2016-10-27 11 views
0

特定の状態に存在しないサイトナビゲーションがあります。アプリケーションがどの状態にあるかにかかわらず、常にページ上部に表示されます。状態の外で解決を使用することは可能ですか?

ユーザーの身元に応じて、特定のメニューオプションを表示/非表示にする必要があります。私はWindows認証を使用しているので、サーバーへの旅行は必要です。問題は、ナビゲーションバーが特定の状態に属していないため、解決策をどこに置くべきかわからないためです。

私は解決を置くことができる他の州の前に最初に解決されるグローバルな状態のようなものがありますか?

ような何か:私は$broadcastを使用して考えられたが、その後、私はアプリケーションへのエントリのすべての可能な点が、ナビゲーションバーは、サーバーから必要な情報を取得し、汚染され、それを放送することを確認する必要があると思います

.state('$global', { 
     url: '/', 
     templateUrl: 'partials/navigation/navbar.html', 
     controller: 'NavCtrl', 
     resolve: { 
      navData: ['$http', 'SettingsFactory', 'ViewMatrixService', function($http, SettingsFactory, ViewMatrixService) { 
       return $http.get(SettingsFactory.APIUrl + 'api/nav', { withCredentials: true }).then(function (response) { 
        ViewMatrixService.GenerateHomeViewMatrix(response.data.CurrentUser); 
        return response.data; 
       }); 
      }] 
     } 
    }) 

にすべての私の他のコントローラは、ナビゲーションバーの責任。

+1

*は、UIルータとは何と対照的に、あなたのナビゲーションHTMLに含まれ、独自のコンポーネントのように聞こえます。 – Makoto

+0

@Makoto私はUIルータの機能である解決策を使用しようとしています。この場合、私はステートレスな解決をしようとしており、可能かどうか疑問に思っています。 – Legion

+1

はい、私はUIルータに精通しており、解決します。しかし、私がここで述べているのは、腸の感覚です。解決で物事を得ることができますが、ユーザーが認証されているかどうかに関わらず、何らかの状態を維持する必要があります。UI Routerを実際に使用したいとは思っていません。 – Makoto

答えて

0

私は状態の解決を使う方法を見つけることができませんでしたが、私は解決策を見つけました。

appという抽象的な親状態を作成しました。私はユーザーのプロファイルを取得appの解決を持っています。その後、任意の子状態コントローラに注入することができます。

ナビゲーションバーはステートレスなので、同じ解決方法では、すべてのコントロールの可視性と無効フラグを格納するためにアプリケーション全体で使用されるサービスにcurrentUserオブジェクトを渡します。それはこのようになります

:本当に*

$stateProvider 
     .state('app', { 
      abstract: true, 
      template: '<ui-view/>', 
      resolve: { 
       currentUser: ['$http', 'SettingsFactory', 'ViewMatrixService', function($http, SettingsFactory, ViewMatrixService) { 
        return $http.get(SettingsFactory.APIUrl + 'api/users/current', { withCredentials: true }).then(function (response) { 
          ViewMatrixService.GenerateHomeViewMatrix(response.data); 
          return response.data; 
         }); 
        } 
      ]} 
     }) 
     .state('app.home', { 
      url: '/', 
      templateUrl: 'partials/home.html', 
      controller: 'HomepageCtrl', 
      resolve: { 
       homeData: ['$http', 'SettingsFactory', function($http, SettingsFactory) { 
        return $http.get(SettingsFactory.APIUrl + 'api/home', { withCredentials: true }).then(function (response) { 
         return response.data; 
        }); 
       }] 
      } 
     }) 
    .state('app.userProfiles', { 
     url: '/admin/users', 
     templateUrl: 'partials/admin/user-profiles.html', 
     controller: 'UserProfilesCtrl' 
    })... 
関連する問題