【问题标题】:AngularJS: [$compile:tpload] Failed to load templateAngularJS:[$compile:tpload] 加载模板失败
【发布时间】:2026-02-07 08:20:03
【问题描述】:

我的 angularjs 示例应用程序在我的基于 netbeans ide 的本地服务器中运行良好。但是当我将应用程序移动到 nginx 服务器时,它在浏览器中出现以下错误。

Error: [$compile:tpload] Failed to load template: views/login.html
http://errors.angularjs.org/1.3.15/$compile/tpload?p0=views%2Flogin.html
    at REGEX_STRING_REGEXP (angular.js:63)
    at handleError (angular.js:16133)
    at processQueue (angular.js:13248)
    at angular.js:13264
    at Scope.$get.Scope.$eval (angular.js:14466)
    at Scope.$get.Scope.$digest (angular.js:14282)
    at Scope.$get.Scope.$apply (angular.js:14571)
    at done (angular.js:9698)
    at completeRequest (angular.js:9888)
    at XMLHttpRequest.requestLoaded (angular.js:9829)

我的 app.js

appModule
        .config(['$routeProvider', function($routeProvider) {
        $routeProvider
                .when('/',
                {
                    controller: 'loginController',
                    templateUrl: 'views/login.html'
                })
                .when('/main',
                {
                    controller: 'dashboardController',
                    templateUrl: 'views/dashboard.html'
                })
                .otherwise({redirectTo: '/'});
    }])

【问题讨论】:

  • 确保文件夹“views”与主模块中的配置文件处于同一级别。
  • 尝试转至domain/views/login.html。如果你不能去那里,角度也不能。
  • 我得到了同样的东西,我可以手动去那里......然后我按下后退按钮,页面和部分模板被加载......但是如果我尝试点击我的路由菜单按钮,它再次失败。例如:它仅在我手动转到页面时才有效,然后将“返回”到模板页面。 O.O?
  • @Suamere 由于文件夹结构错误,模板加载问题仍然存在。确保视图和配置处于同一级别。

标签: javascript angularjs nginx


【解决方案1】:

如果你使用 node.js,试试这个

app.use(express.static(path.join(__dirname,'yourFolder/invoices')));

【讨论】:

  • 请尝试更具体
【解决方案2】:

我发现我的问题与默认 $http 标头有关。我最近刚刚为Authorization 添加了一个默认标头,为application/json 添加了一个默认标头Accept

SURPRISE!!! 事实证明,这些 $http 标头不仅适用于您对端点进行的 $http 调用......而且还适用于拉动您的 的每个调用路由 html文件。而且由于使用这些标头会导致 html 文件爆炸,所以整个事情都会失败。

我只是停止设置默认 $http 标头,并编写了我的微服务调用将使用的辅助服务,因为它们需要 app/json。然后我的 Angular Routing 调用又回到使用标准标头。

【讨论】:

  • 您是如何避免 .html 文件中的标头的?
  • @michaelvidal 更新了我的答案