3

私は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 の正しいルートを提案できますか?

4

2 に答える 2