2014-11-03 3 views
2

У меня есть приложение angularjs, которое основано на проекте ASP.NET, оно использует html5mode и отлично работает, если только не хочу использовать параметры маршрута.Угловая маршрутизация html5mode ASP.NET

Угловая маршрутизация:

$locationProvider.html5Mode(true); 

$routeProvider.when('/accounts', { 
      templateUrl: 'templates/accounts.html', 
      controller: 'accountsCtrl', 
      title: 'Accounts', 
      resolve: { 
       accounts: function (accountData) { 
        return accountData.getAll(); 
       } 
      } 
     }); 

     $routeProvider.when('/account/:accId', { 
      templateUrl: 'templates/editAccount.html', 
      controller: 'editAccountCtrl', 
      title: 'Account', 
      resolve: { 
       account: function ($route, accountData) { 
        return accountData.get($route.current.pathParams.accId); 
       } 
      } 
     }); 

web.config:

<system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="Imported Rule 1" stopProcessing="true"> 
      <match url="^index\.html" ignoreCase="false" /> 
      <action type="None" /> 
     </rule> 
     <rule name="Imported Rule 2" stopProcessing="true"> 
      <match url="." ignoreCase="false" /> 
      <conditions> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /> 
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="/index.html" /> 

     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 

Разгром LOCALHOST: 3849/счета - работа, но локальный: 3849/счет/1 перерывы в системе, она выглядит, как это не загружать библиотеки * .js или любые другие ресурсы.

консоль показывает

Uncaught SyntaxError: Unexpected token < 

для каждой библиотеки. Что не так? Благодаря

UPDATE Проблема заключалась в том, как сценарии ссылки в index.html. Оригинала был:

<script type="text/javascript" src="Scripts/angular.min.js"></script> 

Должен быть:

<script type="text/javascript" src="/Scripts/angular.min.js"></script> 

поэтому, когда я спросил сервер для перехода на локальный хост: 3849/счет/1 он начал искать все файлы на локальном хосте: 3849/счета, не нашли их и вернули index.html. Та же проблема в маршрутизации, а

templateUrl: 'templates/editAccount.html', 

должны быть:

templateUrl: '/templates/editAccount.html', 

ответ

1

Попробуйте это вместо того, чтобы (возможно, вам потребуется изменить путь к index.html):

<?xml version="1.0" encoding="utf-8"?> 

<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=301880 
    --> 
<configuration> 

    <system.webServer> 
    <rewrite> 
    <rules> 
     <rule name="AngularJS" stopProcessing="true"> 
     <match url=".*" /> 
     <conditions logicalGrouping="MatchAll"> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="../index.html" /> 
     </rule> 
    </rules> 
    </rewrite> 

</system.webServer> 


</configuration> 
+0

Нет меняется, извините – nelly2k

+0

Хм. Эта конфигурация должна работать. Я бы рекомендовал использовать Fiddler для проверки неудавшихся запросов. Вероятно, что правила маршрутизации возвращают файл по умолчанию (html) вместо ваших ресурсов. –

+0

Более внимательно, как ссылаются ваши URL-адреса? Относительный путь изменится и приведет к тому, что ваши .js-файлы будут 404/перенаправлены на index.html, если они не были правильно внедрены. –

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