$ routeProvider templateUrl的angular prepending路径

时间:2014-09-24 15:43:34

标签: angularjs

我有这个路线定义:

$routeProvider
    .when('/accountEdit/:accountId?',
    {
        templateUrl: 'templates/accountEdit.html',
        controller: 'accountEditController' 
    });

当网址更改为http://domain.com/accountEdit/24时,我会收到404:

获取http://domain.com/accountEdit/templates/accountEdit.html 404(未找到)

为什么angular前缀accountEdit /在templateUrl之前?

我可以在浏览器中访问文件../templates/accountEdit.html。

这是有效的,我显然改变了一些东西但却看不到什么。我能想到的唯一想法就是我改变了Web中的RouteConfig.Api后端默认为" index.html"

routes.MapRoute(name: "Default", url: "index.html");

但是我已经取消了这些更改,我仍然得到了404。

更新

我可以通过不使用$ locationProvider.html5Mode(true);

来解决这个问题

我认为这是由于同时使用html5Mode和routes.MapRoute(名称:"默认",url:" index.html");

当我访问网站的根目录时,我可能需要更好的方法来返回index.html。

3 个答案:

答案 0 :(得分:0)

您可以使用interceptor之类的:

angular.module('app', [])
            .config(function ($httpProvider) {
               // Add the interceptor to the $httpProvider.
               $httpProvider.interceptors.push('MyHttpInterceptor');
            })
            .factory('MyHttpInterceptor', function ($q) {
                      return {
                          // On request success
                          request: function (config) {
                              config.url = 'mypath/'+ config.url
                              console.log(config); 
                              // Return the config or wrap it in a promise if blank.
                              return config || $q.when(config);
                          }

                  }
            })

答案 1 :(得分:0)

对于索引(站点根目录),您也可以这样做:

$routeProvider
    .when('/accountEdit/:accountId?',
    {
        templateUrl: 'templates/accountEdit.html',
        controller: 'accountEditController'
    })
    .when('/home',
    {
        templateUrl: 'templates/index.html',
        controller: 'indexController'
    })
    .otherwise({
        redirectTo: '/home'
    });

例如,我已将网站烟灰映射到/ home,但您可以按照自己的意愿进行操作。

答案 2 :(得分:0)

尝试templateUrl前加/值:

$routeProvider.when('/accountEdit/:accountId?', { templateUrl: '/templates/accountEdit.html', controller: 'accountEditController' });