2017-02-20 11 views
0

私はNavbarとSidebarのページを持っています。これはほとんどのページで共通しているため、NavbarControllerのLoggedInUserに関連するすべてのデータを読み込みます。Angular JSでビューとコントローラをロードする前に、データを解決する最良の方法は何ですか?

このデータ($ scope.loggedInUser)は、他のコントローラ(子コントローラ)でも使用されています。ユーザーデータを取得する呼び出しは非同期であるため、子コントローラはサーバーから返される前にデータにアクセスしようとします。

子コントローラが動作を開始する前に、親コントローラのすべての約束事を確実に解決する最良の方法は何ですか?

+0

見るのに役立ちます。このhttp://stackoverflow.com/questions/30626919/when-using-ui-router-resolve-how-do-i-access-the-resolved-data –

+0

ui-routerの代わりにng-routeを使用している場合はどうなりますか? –

+0

これは問題ありません。 'ng-route'のために' resolve'を使うことができます –

答えて

0

$ stateProviderのresolveを使用する必要があります。この関数は、新しい状態をロードする前にすべての約束が解決されるようにします。

+0

ui-routerではなくng-routeを使用している場合はどうなりますか? –

+0

それは同じ機能を持っています:https://docs.angularjs.org/api/ngRoute/provider/$routeProvider –

0

解決策は、ngRouteとより堅牢なUIルーターの両方のルートに接続できるプロパティです。解決には、ルートが変更される前に正常に解決する必要のある1つ以上の約束が含まれています。これは、ビューを表示する前にデータが使用可能になるのを待つことができ、コントローラ内のモデルの初期化を単純化するため、コントローラの代わりにコントローラに初期データが渡され、データをフェッチする必要があるからです。コントローラで

$routeProvider 
.when("/news", { 
    templateUrl: "newsView.html", 
    controller: "newsController", 
    resolve: { 
     message: function(messageService){ 
      return messageService.getMessage(); 
    } 
} 

}) 

app.controller("newsController", function (message) { 
$scope.message = message; 

})。

希望、これはあなたが

+0

私があなたの問題を解決した場合、答えを受け入れてください –

関連する問題