2016-11-22 8 views
0

私は既存のMVCアプリケーションに取り組んでいます。数日前に角度モジュールを追加しました。私たちはそれをajaxで読み込もうとしましたが、角度の読み込みが拒否されたので、インデックスに角度のルートとng-viewを追加することにしました。問題は、角度のあるルートだけが動作していることです.MVCルートは動作していません。私はそれらを不必要な仕事のトンを引き起こすでしょう$routeProviderに1つずつ追加する必要がありますか?また、テスト用に2を試してみましたが、C#コントローラがView()を返すと、特定のng-view divにロードされず、部分をフルページとしてロードします。角度をいくつかのルートとmvcを扱えるようにすることは可能ですか?

これは私の実際のルートの設定です:

$routeProvider 
     .when('/', { 
      templateUrl: '/ServiceDesk/starter' 
     }) 
      //Facturas 
     .when('/app/Facturacion/MantenimientoFacturas', { 
      templateUrl: '/Facturacion/MantenimientoFacturas', 
      controller: 'FacturasController' 
     }) 
      // Ordenes 
      .when('/app/Facturacion/MantenimientoOrdenes', { 
       templateUrl: '/Facturacion/MantenimientoOrdenes', 
       controller: 'OrderController' 
      }); 

     $locationProvider.html5Mode(true); 

私は、ちょうどMVCによって管理され、このルートと他のすべてを管理するために、角が大好きだが、それが可能であるか、何より良い方法?

答えて

0

経路は優先順位に応じて優先順位が与えられますので、ルートがMVC経路内のどのような順番であるかを知るだけで済みます。例として、それはのように見える

/app/Facturacion/ 

あなたが角度を実行する場所です。だからあなたのMVCのルートで、RouteConfig

routes.MapRoute(
    name: "ngRoute", 
    url: "app/Facturacion/{*angularRoute}", 
    defaults: new {controller = "Facturacion", action = "Index" } 
); 

であなたの最初のルートとして追加いつでもアプリ/ Facturacion /で始まるルートを打つだから今、角度のルートが引き継ぎます。それ以外の場合は、スキップしてMVCルートを使用し続けます。角度(/ app/Facturacion /)と同じパスを使用する特定のMVCルートがある場合は、RouteConfigのngRouteの上に追加してください。

routes.MapRoute(
    name: "myMvcRoute", 
    url: "app/Facturacion/someRoute", 
    defaults: new {controller = "Facturacion", action = "SomeAction" } 
); 

indexアクションは、ビューを返し、あなたのビューでは、あなたの角度スクリプトや角度のコードを追加することをごFacturacionControllerで確認してください。例ビューは

@{ 
    ViewBag.Title = "Facturacion"; 
} 
@section head{ 
    <base href="/"> //Add a head section in your layout (make it optional) 
} 
@section scripts{ 
    @Scripts.Render("~/bundles/angularjs") 
    @Scripts.Render("~/bundles/facturacionSPA") 
} 
<div ng-app="facturacionApp"> 
    <div ng-view></div> 
</div> 

ようなものになるだろうそして、あなたアンギュラルートはまた、角度テンプレートは通常のHTMLファイルではなく、部分的なビューでなければなりません

$routeProvider.when('/app/Facturacion/MantenimientoFacturas', { 
    templateUrl: '/Facturacion/MantenimientoFacturas', 
    controller: 'FacturasController' 
    }).when('/app/Facturacion/MantenimientoOrdenes', { 
    templateUrl: '/Facturacion/MantenimientoOrdenes', 
    controller: 'OrderController' 
    }).otherwise({ 
    redirectTo: '/ServiceDesk/starter', 
    }); 

ようになります。角度のついたものやmvcのもののためのMVCにぴったりの方がいいですね、私の意見でそれらを混ぜないでください!

EDIT: 「/のServiceDesk /スターターが」MVCのルートであり、あなたはそれにルーティングする角度たくない場合は、あなたがあなたの角度コントローラでこのような何かを行うことができます。

if ($location.url().indexOf('/ServiceDesk/starter') >= 0 && supports_history_api()) $window.location.href = '/ServiceDesk/starter'; 

コードについて完成度を高めるためにsupports_history_api()を使用すると、$ locationProviderにhtml5モードを使用するかどうかが決まります。

function supports_history_api() { 
    return !!(window.history && history.pushState); 
} 
+0

ありがとうございました!このルートをマップすると疑いがあります:routes.MapRoute( 名前: "myMvcRoute"、 url: "app/Facturacion/someRoute"、 デフォルト:new {controller = "Facturacion"、action = "SomeAction"} ); MVCでは$ rootProviderではなく、アプリケーションはURLにヒットしませんでした。それは私をリダイレクトします。他の場合でも、それを削除します。それ以外の場合、私はベースhrefにリダイレクトされます、私はすべてのルートを$ routeProviderに追加する必要がありますか? – user3542595

+0

はい、角度アプリは、そのURLを打つことはない、私はあなたが正常なMVCのURLを実行し、角度アプリを実行したい場合は、それを述べていた。しかし、私はあなたの角度から戻ってmvcに戻ってくるために、$ window.location.hrefを使用して角$場所(私はとにかくやっている)を使用しないでそのURLをロードしたかった。したがって、角度からmvcに行くには、$ window.location.href = yourMVCrouteを使用してください。角度を保つには、$ locationを使用します。 – garethb

+0

編集を参照してください私の答え – garethb

関連する問題