2016-11-22 7 views
0

그래서 기존 MVC 응용 프로그램에서 작업하고 며칠 전에 각 모듈을 추가했습니다. 우리는 ajax를로드하려고 시도했지만 각도가로드를 거부하기 때문에 인덱스에 각도 루트와 ng-view를 추가하기로 결정했습니다. 문제는 각도 경로 만 작동하고 MVC 경로는 작동하지 않는다는 것입니다. 그 중 하나를 불필요한 작업을 유발하는 $routeProvider에 하나씩 추가해야합니까? 또한 테스트를 위해 2로 시도하고 C# 컨트롤러가 View()을 반환하면 특정 ng-view div에로드되지 않고 partial을 전체 페이지로로드합니다.앵귤러 핸들을 일부 라우트 및 기타 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); 

I, 그냥 MVC에 의해 관리 될이 경로와 모든 다른 사람을 관리하는 각 사랑이 있다는이 가능하거나 무슨 더 나은 방법?

답변

0

경로는 순서에 따라 우선 순위가 부여되므로 경로가 MVC 경로에 어떤 순서로 있는지 똑똑해야합니다. 예를 들어, 모양은 다음과 같습니다.

/app/Facturacion/ 

각도를 실행할 위치입니다. 그래서 MVC 경로에서, 언제 당신이/Facturacion /는, 각 루트 앱 이상 걸릴 것입니다로 시작하는 경로를 공격 그래서 지금

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

RouteConfig

에서 첫 번째 경로로 추가. 그렇지 않으면 건너 뛰고 MVC 경로를 계속 사용합니다. 각도 (/ app/Facturacion /)와 동일한 경로를 사용하는 특정 MVC 경로가있는 경우 RouteConfig의 ngRoute 위에 추가하면 MVC 및 각도가 계속 실행됩니다.
routes.MapRoute(
    name: "myMvcRoute", 
    url: "app/Facturacion/someRoute", 
    defaults: new {controller = "Facturacion", action = "SomeAction" } 
); 

은 색인 작업을보기를 반환하여 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> 

같은 것 그리고 각도 경로는 또한

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

처럼 보일 것이다, 각 템플릿은 일반 HTML 파일이 아닌 부분적인 전망을해야한다. 각도 물건에 대한 각도 및 mvc 물건에 대한 MVC에 충실하는 것이 좋습니다. 내 의견으로는 혼합하지 마십시오!

편집 : '/의 ServiceDesk/스타터'는 MVC 경로이며, 당신이 당신의 각 컨트롤러에이 같은 작업을 수행 할 수 있습니다, 그것은 노선에 각하지 않을 경우에 대한

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

코드 completeness를 위해 supports_history_api()는 내가 이전 IE가 작동해야하므로 $ locationProvider에 html5 모드를 사용할지 여부를 결정합니다.

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

답장을 보내 주셔서 감사합니다. routes.MapRoute ( 이름 : "myMvcRoute", url : "app/Facturacion/someRoute", 기본값 : new {controller = "Factracion", action = "SomeAction"} ); MVC하지만 $ routeProvider에있는 앱은 결코 URL에 도달하지 않습니다. 그것은 나를 리디렉션 할 것입니다. 다른 경우에도 제거합니다. 다른 방법으로 그것은 기본 href로 나를 리디렉션합니다, 나는 모든 경로를 $ routeProvider에 추가 할 수있는 힘입니다. – user3542595

+0

네, 앵귤러 애플 리케이션은 결코 URL을 치지 않을 것입니다, 당신이 정상적인 MVC URL을 실행하고 각도 애플 리케이션을 실행하지 않으려는 경우 그 진술했다.하지만 난 당신이 앵글 내에서 앵글에서 mvc로 각도를 벗어나고 싶어, $ window.location.href를 사용하여, 각도 $ 위치 (어쨌든 내가 뭘) 사용하지 마십시오. 그래서 각도에서 mvc로 이동하려면 $ window.location.href = yourMVCroute를 사용하십시오. 각도를 유지하려면 $ location을 사용하십시오. – garethb

+0

편집 내 대답보기 – garethb