4

我有想要用作 AngularJS 模板的 app/assets/templates/api-list.haml。我按照本教程创建了一个 templates.js 文件,该文件将我编译的所有 Haml AngularJS 模板插入到$templateCache. 但是,我似乎无法让这些缓存的模板与我的 AngularJS 路由一起使用:

api_app.config(['$routeProvider', ($routeProvider) ->
  $routeProvider.when '/',
    templateUrl: 'api-list'
    controller: api_app.ApiListController
  $routeProvider.otherwise
    redirectTo: '/'
])

当我加载我的应用程序时,我在浏览器控制台中看到 404 错误,因为它试图向http://localhost:3000/api-list. 我可以在浏览器中查看 /assets/templates.js 并看到它$templateCache.put("api-list"已定义,因此应该有一个名为“api-list”的模板。在定义路由之前,我在我的页面中加载了 templates.js。

我也尝试像这样注入$templateCache我的路由配置:

api_app.config(['$routeProvider', ($routeProvider, $templateCache) ->
  $routeProvider.when '/',
    template: $templateCache.get('api-list')
    controller: api_app.ApiListController
  $routeProvider.otherwise
    redirectTo: '/'
])

但这会导致Uncaught TypeError: Cannot call method 'get' of undefined from ApiApp错误。如果我将第一行更改为api_app.config(['$routeProvider', '$templateCache', ($routeProvider, $templateCache) ->,则会收到错误消息Uncaught Error: Unknown provider: $templateCache from ApiApp

如何说服我的路线使用模板,$templateCache而不是尝试通过新请求加载它?

4

2 回答 2

9

我得到了一些没有$templateCache. 我用以下内容制作了一个 config/initializers/haml.rb 文件:

Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate

然后在我的 config/application.rb 中,我添加了config.assets.paths << Rails.root.join('app', 'assets', 'templates').

我还将我的模板文件从 重命名api-list.hamlapi-list.html.haml. 我的路线现在看起来像这样:

api_app.config(['$routeProvider', ($routeProvider) ->
  $routeProvider.when '/',
    templateUrl: '/assets/api-list.html'
    controller: api_app.ApiListController
  $routeProvider.otherwise
    redirectTo: '/'
])

我不喜欢/assets在那里进行硬编码,所以我最终可能会将此文件从 routes.js.coffee 更改为 routes.js.erb 并使用 Rails 帮助程序来获取路径。

于 2013-09-11T22:34:31.843 回答
3

您在使用 templateCache 时遇到问题的原因是路由位于配置块中。如果您参考有关modules的 AngularJS 文档,您将看到以下行:

只有提供者和常量可以注入到配置块中。这是为了防止在完全配置之前意外实例化服务。

于 2013-09-11T22:40:51.510 回答