AngularJS - 路由到空路由(“/”)在IE7中不起作用

时间:2013-04-12 15:46:31

标签: angularjs routing internet-explorer-7

我有一个AngularJS应用程序,其中包含所有常见的IE解决方法:

<html id="ng-app" class="ng-app:clientsite" ng-app="clientsite" xmlns:ng="http://angularjs.org">
    <head>
        <!--[if lt IE 9]>
          <script src="js/html5.js"></script>
        <![endif]-->
        <!--[if lte IE 8]>
          <script>
            document.createElement('ng-include');
            document.createElement('ng-pluralize');
            document.createElement('ng-view');
            document.createElement('ng:include');
            document.createElement('ng:pluralize');
            document.createElement('ng:view');
          </script>
        <![endif]-->
        <!--[if lt IE 8]>
          <script src="js/json2.js"></script>
        <![endif]-->

网站有效,我可以到达任何路线,除了IE7没有拿起空路线,“/”:

$routeProvider
.when("/",
{
    templateUrl: "/htm/home.htm"
})

它路由到我的路线:

.otherwise(
{
    templateUrl: "/htm/notfound.htm"
});

如果我在路线的末尾添加/#/,它可行,但我们的客户不会接受(人们需要能够直接访问www.theirsite.com,我们不能要求www.theirsite.com /#/).

在幕后我有一个ASP.Net MVC服务器,它只是把所有东西都路由到我的索引文件(除了IE7中的这一条路线之外,它可以全面工作)。

如何让IE7中的空路径正常工作?

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,这就是我如何解决它:

.otherwise({
    templateUrl: '/app/error.html',
    resolve: {
        // Here we ensure that our route has the document fragment (#), or more specifically that it has #/ at a minimum.
        // If accessing the base URL without a trailing '/' in IE7 it will execute the otherwise route instead of the signin
        // page, so this check will ensure that '#/' exists and if not redirect accordingly which fixes the URL.
        redirectCheck: ['$location', function ($location) {
            var absoluteLocation = $location.absUrl();

            if (absoluteLocation.indexOf('#/') === -1) {
                $location.path('/');
            }
        }]
    }
});