私はAngularJSがまったく初めてです。$routeProvider で相対 URL を試してみたかっただけです。
シナリオは次のとおりです。
「編集」ページがあります。ページへの ASP.NET MVC リンクは次のようになります。
http://localhost/Workflow/Edit
したがって、ASP.NET MVC コントローラーは「WorkflowController」で、アクションは「編集」です。パーシャルには、次のようなパーシャル ビューを返すコントローラー アクションがあります。
public ActionResult WorkflowTransition()
{
return PartialView("WorkflowTransition");
}
public ActionResult WorkflowTransitionApprovers()
{
return PartialView("WorkflowTransitionApprovers");
}
以下は AngularJS モジュールの構成です - 注: PartialView (上記のように) はルートごとに呼び出されます (これは正しくない可能性があります)。
$routeProvider.when('Workflow/WorkflowTransition', {
templateUrl: '/Workflow/WorkflowTransition',
controller: 'transitionCtrl',
});
$routeProvider.when('Workflow/WorkflowTransitionApprovers', {
templateUrl: '/Workflow/WorkflowTransitionApprovers',
controller: 'approversCtrl'
$routeProvider.otherwise({
redirectTo: '/'
});
注:次のいずれも指定していません。
$locationProvider.html5Mode(false);
また
$locationProvider.html5Mode(false).hashPrefix('!');
href リンクは次のように指定されます。
<a href="#/Workflow/WorkflowTransition">{{workflow.Identifier}}</a>
これにより、次の形式のリンクが生成されます。
http://localhost/Workflow/Edit#/Workflow/WorkflowTransition
これは明らかに間違っています (リンクをクリックしても何も起こらないのは、おそらくブラウザがハッシュに移動しようとしたためです)。
<a href="/#/Workflow/WorkflowTransition">{{workflow.Identifier}}</a>
パーシャルを直接ナビゲートするhttp://localhost/Workflow/WorkflowTransition
と、ブラウザは html をそのままレンダリングします (angularjs 中括弧 {{}} とともに)。
私の質問は次のとおりです: AngularJS は「#」または「#!」をどのように扱いますか? 相対 URL の決定に関しては? たとえば、このルートを実行します (アンカー タグの URL から /Edit 部分を削除したと仮定します):
$routeProvider.when('Workflow/WorkflowTransition',
次の URL に一致します。
http://localhost/Workflow/#WorkflowTransition
?
URL から '#' を削除し、 $routeProvider.when() の URL パターンと照合しますか?
誰かが相対 URL の正しいルートを提案できますか?