角度路由html5mode ASP.NET

时间:2014-11-03 04:15:39

标签: javascript asp.net angularjs url-routing angular-routing

我有一个基于ASP.NET项目的angularjs应用程序,它使用html5mode并且工作得很好,除非我想要传递路由参数。

角度路由:

 $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>

Rout localhost:3849 / accounts - 工作,但localhost:3849 / account / 1打破了系统,看起来它无法加载* .js库或任何其他资源。

控制台显示

Uncaught SyntaxError: Unexpected token <
每个库都有

。怎么了? 感谢

更新 问题是index.html中引用的脚本的方式。 原来是:

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

必须:

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

所以当我要求服务器转到localhost:3849 / account / 1时,它开始查看localhost:3849 / account中的所有文件,没有找到它们并返回index.html。  路由中的问题相同,而不是

templateUrl: 'templates/editAccount.html',

必须是:

templateUrl: '/templates/editAccount.html',

1 个答案:

答案 0 :(得分: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>