Restful/Ruby convension を使用してアプリを構築しようとしてい/<resource>/[method]/[id]
ます。CodeIgniter のようなサーバー側の MVC フレームワークを使用するときに以前に行った方法は、URI に基づいて動的にルーティングすることでした。
元。
www.foo.com/bar/baz/1
次に、アプリはbaz
コントローラー/クラスbar
でメソッドを使用して戻りviews/bar/baz.php
ます(からのデータが入力されますbar->baz
)
Angularでも同じことをしたいのですが、これをサポートしているかどうかはわかりません(サポートしている場合、どうすればよいか正確にはわかりません)。現時点では、$routeProvider
のwhen
メソッドを使用して各ケースを指定しています。$location.path()app.js
には必要なものがあるように見えますが、 (内で)使用できるとは思いませんconfig()
。
私がやりたいことは次のようなものです:
.config([
'$routeProvider', function($routeProvider) {
$routeProvider
.when(//<resource> controller exists
resource+'/'+method, {
"templateURL": "views/" + resource + "/" + method + ".html",
"controller": resource
}
).otherwise({ "redirectTo":"/error" });
}
]);
そして、ルーターは適切なメソッドを自動的に呼び出します。
編集また、指定すると$routeProviderがフリークアウトするのはなぜwhen('/foo/bar', {…})
ですか?
EDIT 2 Leeの提案に従って、私は次のようなことを検討しています:
$routeProvider
.when(
'/:resource/:method/:id', {
"templateUrl": function(routeParams){
var path = 'views/'+routeParams.resource+'/';
return ( typeof routeParams.method === 'undefined' ) ?
path+'index.html' : path+routeParams.method+'.html';
},
"controller": RESOURCE
})
.otherwise({redirectTo: '/error'});
$routeProviderのドキュメントで次のことに気付きました。
templateUrl – {string=|function()=} – ngView で使用する必要がある html テンプレートへのパスを返すパスまたは関数。
templateUrlが関数の場合、次のパラメーターで呼び出されます。
• {Array.<Object>} - 現在のルートを適用して、現在の$location.path()から抽出されたルート パラメータ
編集: 関数に設定するオプションtemplateUrl
は、不安定な1.1.2ビルドの一部です: #1963 (ただし、2013-02-07 の時点では機能しません)。
AngularJS の Github: #1193 #1524にこの機能を追加することについての議論がありますが、それが実際に実装されたかどうかはわかりません (上で引用した Dash のドキュメントでは、実装されているように見えます。まだ更新されていません)。
EDIT 3私が何をしたいのかを明確にするために(リーの要求ごとに)、最も簡単な言葉で、私は行きたいですwww.foo.com/index.html#/people
Angular は controller を使用し、そのメソッドをpeople
自動的に呼び出し、サービスを提供する必要がありますindex
./views/people/index.html
./views/people/map.html
また、私が行くとwww.foo.com/index.html#/people/map
Angular はpeople
再びコントローラーを使用する必要がありますが、今回は自動的にそのmap
メソッドを呼び出して…map.htmlを提供します(マップが URL で指定されたため)
./views/people/index.html
./views/people/map.html
次に、私が行くと
www.foo.com/index.html#/widgets
Angularは役立つはずです
./views/widgets/index.html
./views/widgets/details.html
.when()
ルーターのコードは非常に一般的なものにする必要があります。ルートごとに を指定する必要はありません。