2015-05-11 3 views
2

У нас есть существующее/устаревшее приложение MVC 5 и мы хотели бы «экспериментировать» с некоторыми AngularJS SPA в основном приложении.AngularJS с областями MVC

Чтобы сохранить это в чистоте и отдельно, мы создали новый MVC Area (приложение уже использует Areas) со следующим контроллером по умолчанию ...

namespace Acme.WebAdmin.Areas.Scheduler.Controllers 
{ 
    public class HomeController 
     : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     public ActionResult PageOne() 
     { 
      return PartialView(); 
     } 

     public ActionResult PageTwo() 
     { 
      return PartialView(); 
     } 

     public ActionResult PageThree() 
     { 
      return PartialView(); 
     } 
    } 
} 

Файл SchedulerAreasRegistration.cs выглядит следующим образом:

public class SchedulerAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "Scheduler"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Scheduler_default", 
      "Scheduler/{controller}/{action}/{id}", 
      new 
      { 
       controller = "Home", 
       action = "Index", 
       id = UrlParameter.Optional 
      } 
     ); 
    } 
} 

на/Планировщик/Home/Index View мы имеем следующий HTML:

<div ng-app="SchedulerApp" ng-controller="ManagementPageController"> 


    <p>{{models.helloAngular}}</p> 

    <ul> 
     <li><a href="/#/PageOne">PageOne</a></li> 
     <li><a href="/#/PageTwo">PageTwo</a></li> 
     <li><a href="/#/PageThree">PageThree</a></li> 
    </ul> 

    <div ng-view></div> 

</div> 

Мы также добавили зависимость маршрута к AngularJS применения:

var SchedulerApp = angular.module('SchedulerApp', ['ngRoute']); 

SchedulerApp.controller('ManagementPageController', ManagementPageController); 

var configFunction = function ($routeProvider, $locationProvider) { 
    $routeProvider. 
     when('/PageOne', { 
      templateUrl: 'Home/PageOne' 
     }) 
     .when('/PageTwo', { 
      templateUrl: 'Home/PageTwo' 
     }) 
     .when('/PageThree', { 
      templateUrl: 'Home/PageThree' 
     }); 

    $locationProvider.html5Mode(true); 
} 
configFunction.$inject = ['$routeProvider', '$locationProvider']; 

SchedulerApp.config(configFunction); 

Когда мы запускаем приложение и нажмите на навигационные ссылки (например, 'PageTwo') Я всегда возвращаюсь на домашнюю страницу стандартного веб-сайта со следующим URL-адресом http://localhost:52654/#/PageTwo.

Я не уверен, что проблема заключается в том, что AngualrJS не перехватывает ссылку, если это проблема маршрутизации MVC.

Любая помощь/совет будут оценены.

+0

Пробуйте область в шаблонеUrl 'Scheduler/Home/PageOne'. – Jasen

+0

Я пробовал это, но я все равно перенаправляюсь обратно на «настоящую» домашнюю страницу, например. http: // localhost: 52654/#/PageOne - почти кажется, что Angular не перехватывает запрос (я предполагаю, что это то, что он делает), поскольку он фактически просто перенаправляется на указанный href = '/ #/PageOne. Я не вижу ошибок JavaScript на странице. – Neilski

+0

Каковы ваши правила маршрутизации MVC для уровня корня и для вашей области? – Jasen

ответ

2

Вы используете неправильный синтаксис href с дополнительными ведущими /.

Ведущий / на любой относительный URL-адрес будет искать базовый корень. Таким образом, все, что вы делаете перезагрузки страницы каждый раз, когда

Изменение

<a href="/#/PageTwo">PageTwo</a> 

К

<a href="#/PageTwo">PageTwo</a> 

Все, что вы хотите, это хэш в HREF, то угловой путь все после #

+0

Я изменил код, как было предложено, но вместо перенаправления на домашнюю страницу веб-сайта (как вы и предсказывали) страница AngularJS остается загруженной, но заполнитель ng-view не заполняется. – Neilski

+1

Когда я изменил HTML-код, я не сразу заметил, что JavaScript-ошибка в настоящее время бросается на инъекцию $ locationProvider. Когда я удалил это и изменил ссылки на templateUrl только на имя представления (например, «PageOne»), страница правильно маршрутизировалась. Спасибо за помощь. – Neilski

+0

Возможно, пути к шаблонам неверны? Необходимо найти в браузере инструменты разработчика для консольных ошибок и на вкладке netwrok, чтобы узнать, что происходит с любыми запросами – charlietfl

Смежные вопросы