2016-11-22 6 views
0

Итак, я работаю над существующим приложением MVC, и несколько дней назад мы добавили угловой модуль. Мы попытались загрузить его с помощью ajax, но угловые отказываются загружаться, поэтому мы решили добавить угловой маршрут и ng-view по индексу. Проблема в том, что работают только угловые маршруты, маршруты MVC мертвы. Нужно ли добавлять их один за другим до $routeProvider, что вызовет массу ненужной работы? Также мы пробуем с 2 для тестирования, и когда контроллер C# вернет View(), он не загрузится в конкретном ng-view div, просто загрузите частичную, как полную страницу.Можно ли использовать угловую ручку для некоторых маршрутов и т. П. Другие?

Это моя фактический маршрут конфигурация:

$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. Если есть определенный маршрут MVC, используя тот же путь, что и угловой (/ app/Facturacion /), добавьте его выше ngRoute в свой RouteConfig, и это продолжит выполнение MVC, а не угловое.

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

Убедитесь в вашем FacturacionController, что действие Index возвращает вид, и на ваш взгляд, добавить свои угловые сценарии и угловую код. Пример вид будет что-то вроде

@{ 
    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, не смешивайте их, на мой взгляд!

EDIT: Если «/ ServiceDesk/стартер» является маршрутом и MVC вы не хотите, угловатого маршрут к нему, вы можете сделать что-то подобное в вашем угловом контроллере:

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

кодекса supports_history_api() для полноты, это определяет, использую ли я режим html5 для $ locationProvider, поскольку мне нужен старый IE для работы

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

Благодарим вас за ответ! У меня возникло такое сомнение, если я наметил этот маршрут: route.MapRoute ( имя: «myMvcRoute», url: «app/Facturacion/someRoute», defaults: new {controller = "Facturacion", action = "SomeAction"} ); в MVC, но не в $ routeProvider, приложение никогда не попадает в URL-адрес; он будет перенаправлять меня только на другое. Даже если я удалю. иначе он перенаправит меня на базовый href, похоже, что я могу добавить каждый маршрут на $ routeProvider, я прав? – user3542595

+0

Да, угловое приложение никогда не ударит по этому URL-адресу, я утверждал, что если вы хотите запустить обычный URL-адрес mvc и не запускать угловое приложение.Но я хотел бы загрузить этот url изнутри угловой, чтобы выйти из угловой обратно в mvc, использовать $ window.location.href, не использовать угловое расположение $ (что я делаю в любом случае). Чтобы перейти от углового к mvc, используйте $ window.location.href = yourMVCroute. Чтобы оставаться в пределах углового, используйте $ location. – garethb

+0

См. Редактирование моего ответа – garethb