2017-12-02 2 views
-1

私は動的ルートを持っており、できるだけ効率的に状態を切り替えるようにしています。AngularJSパラメタを使用した動的ルーティングベストプラクティス

私は、インスタンスの元の擬似コードの状態を持っている場合は

.state("apartmentDetails", { 
     url: "/apartmentDetails/:id", 
     templateUrl: "templates/apartmentDetails.html", 
     controller: apartmentDetailsCOntroller 
}) 

私のコントローラは、写真付きのアパートオブジェクトのリストである(パラメータIDを取得し、その後、インスタンスのサービスを呼び出すか、データをフェッチしますビルド名など)をファイルから取得する場合は、

buildApartmentTemplate()のような関数を実行してから、テンプレートを作成して$ scope?を渡します。これは私が考えることができる唯一の方法ですが、私はテンプレートを生成する関数を含まないより良い方法があると確信しています。それをよりダイナミックにするベストプラクティスはありますか?

+0

助けます。質問をするあなたの動機が「______についての議論に参加したい」場合は、ここで質問するべきではありません。しかし、あなたのモチベーションが「他に______を私に説明してほしい」とすれば、おそらくOKです。 – georgeawg

答えて

0

これが役に立ちます。

私は通常行うことは、それはようなものになるだろう、あなたのケースでいくつかのコンポーネントをロードする前に、すべて私のものを解決している。また、あなたはあなたの解決のデータが利用できるようになりますsomeResolvedDataのバインディングを作成する必要があります

state("apartmentDetails", 
{ 
url: "/apartmentDetails/:id", 
templateUrl: "templates/apartmentDetails.html", 
controller: apartmentDetailsCOntroller, 
resolve: { 
    someResolvedData: ($stateParams) => { 
    return YourService.getMyData($stateParams.id); 
    } 
} 
}) 

コントローラ上またはテンプレート内に存在します。 YourServiceはあなたのサービスの名前です(注入することを忘れないでください)。getMyData()は、サービスを利用してデータを返す関数です。ここでのデータの解決についての詳細

チェック:

https://toddmotto.com/resolve-promises-in-angular-routes/

https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c

+0

pegla私はあなたが意味するものを見ていますが、データを取得した後は、そのデータを渡してテンプレートを構築するpopulateView()などの関数を実行しないでビューを生成する方法を教えてください。 populateView()関数を呼び出さずにそれを行う方法がありますか? – baryjones23saturn

+0

populateView()関数で何をやっているのか分かりません。あなたは解決を介してデータを取得し、それからテンプレート上にデータを表示します。コントローラ/スコープのデータはどこにでもあります。私はあなたがあなたの質問を更新することができますその人口ビュー機能で達成しようとしていることを理解していない?あなたがURLスラッグに基づいて別のテンプレートを切り替えるには、templateProviderを使用し、スラッグに基づいてそこにテンプレートを戻す必要があります。 – pegla

1

より良いオプションは、ルート定義で約束を使用して、約束が解決された場合の結果を注入し、この方法であなたはunnecesaryクエリを避けるためでありますテンプレートが読み込まれた後、約束が拒否された場合は、404ページまたは任意のものにリダイレクトできます。

app.service('apartamentService', ['$http', function ($http) { 
 
    this.list = function (id) { 
 
     return $http({url: '/apartaments/' + id}); 
 
\t }; \t 
 
}]); 
 
\t \t 
 
app.config(['$routeProvider', 
 
function ($routeProvider) { 
 
\t $routeProvider 
 
\t \t .when('/apartmentDetails/:id/', { 
 
\t \t templateUrl: 'templates/apartmentDetails.html', 
 
\t \t controller: 'apartmentDetailsController ', 
 
\t \t resolve: { 
 
\t \t \t apartaments: ['$route', 'apartamentService', 
 
\t \t \t \t function ($route, apartamentService) { 
 
\t \t \t \t \t return apartamentService.list($route.current.params.id) 
 
\t \t \t \t }] 
 
\t \t \t }}); 
 
\t \t \t \t \t 
 
}]); 
 

 
app.controller('apartmentDetailsController', ['$scope', 'apartaments', function ($scope, apartaments) { 
 
\t $scope.apartaments = apartaments; \t 
 
}]);

希望は私はそれが**主に意見をベース**ので、この質問はstackoverflowのためにオフトピックですあなた

+0

私はデータを取得した後、私はいつもpopulateView()のような関数を実行しなければならないか、どこかでこのデータを渡していくつかの関数populateView()を呼び出さずにビューにデータを渡すことができます – baryjones23saturn

+0

populateView()ルートのparamに従ってサーバーからのアパートのリストをロードしますか?これがその機能であれば、anwserはnoです。 – dave008

関連する問題