AngularJSの$routeProvider
と$stateProvider
の違いを説明してください。
どちらがベストプラクティスですか?
どちらもSPA(Single Page Application)でルーティング目的に使用されるのと同じ働きをします。
コントローラとビューへのURL(HTMLパーシャル)。それは$ location.url()を監視してパスを既存のルート定義にマッピングしようとします。
HTML
<div ng-view></div>
上記のタグは、angleの.config
(configuration phase)で述べた$routeProvider.when()
条件からテンプレートをレンダリングします。
制限事項: -
ng-view
のみを含めることができます$routeProvider
は失敗します。 (そのためには、ng-include
、ng-switch
、ng-if
、ng-show
のようなディレクティブを使用する必要があります。これらはSPAで使用するには不適切に見えます)AngularUIルーターはAngularJSのルーティングフレームワークで、インターフェイスの一部をステートマシンにまとめることができます。 UI-Routerは状態を中心に編成されています。状態にはオプションでルートやその他の動作を付加することができます。
複数の名前付きビュー
もう1つの優れた機能は、テンプレート内に複数のUIビューを持つことができることです。
複数の並列ビューは強力な機能ですが、多くの場合、view
をネストし、それらのビューをネストした状態とペアにすることで、インターフェイスをより効率的に管理できます。
HTML
<div ui-view>
<div ui-view='header'></div>
<div ui-view='content'></div>
<div ui-view='footer'></div>
</div>
ui-router
の力の大部分は、入れ子になった状態とビューを管理できることです。
長所
ui-view
を含めることができますui-view="some"
を状態名と共に使用して絶対ルーティングを使用するだけで、@
of stateを変更できます。@
を変更するためにui-view="some"
のみを使用することです。ネストされているかどうかをチェックするのではなく、これはui-view
を置き換えます。ui-sref
を使用して、州で言及されているhref
に基づいてURL
のURLを動的に作成できます。また、json
の形式で州のパラメーターを指定することもできます。状態付きのさまざまなネストされたビューでの柔軟性を高めるために、ui-router
を選択してください。
Angularの独自のng-Routerはルーティング中にURLs
を考慮します、UI-RouterはURLに加えてstates
を受け取ります。
ステートは名前付き、ネスト、およびパラレルビューにバインドされているため、アプリケーションのインターフェイスを強力に管理できます。
Ng-routerでは、<a href="">
タグを介してリンクを提供するときはURLについて非常に注意する必要がありますが、UI-Routerではstate
のみを覚えておく必要があります。あなたは<a ui-sref="">
のようなリンクを提供します。たとえあなたがUI-Routerで<a href="">
を使ったとしても、あなたがng-routerでするのと同じように、それはまだうまくいくでしょう。
したがって、いつかURLを変更することにしたとしても、state
は変わりませんので、URLを変更する必要があるのは.config
だけです。
NgRouterを使って簡単なアプリを作ることができますが、UI-Routerは複雑なアプリのために開発をずっと容易にします。こちらが wikiです。
$ route:これはURLをコントローラやビュー(HTMLパーシャル)にディープリンクするために使われ、既存のrouteの定義からパスをマッピングするために$ location.url()を監視します。
NgRouteを使用すると、ルートは$ routeProviderで設定され、ui-routerを使用すると、ルートは$ stateProviderと$ urlRouterProviderで設定されます。
<div ng-view></div>
$routeProvider
.when('/contact/', {
templateUrl: 'app/views/core/contact/contact.html',
controller: 'ContactCtrl'
});
<div ui-view>
<div ui-view='abc'></div>
<div ui-view='abc'></div>
</div>
$stateProvider
.state("contact", {
url: "/contact/",
templateUrl: '/app/Aisel/Contact/views/contact.html',
controller: 'ContactCtrl'
});