2013-09-11 2 views
4

У меня есть приложение/активы/шаблоны/api-list.haml, которые я хочу использовать в качестве шаблона AngularJS. Я последовал за this tutorial, чтобы создать файл templates.js, который вставляет все мои скомпилированные шаблоны Haml AngularJS в $templateCache. Тем не менее, я не могу показаться, чтобы сделать эти кэшированные шаблоны работать с моим AngularJS маршрутов:Как использовать маршруты AngularJS с шаблонами Haml в приложении Rails

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 вместо того, чтобы загружать его с помощью нового запроса?

ответ

9

У меня что-то работает без $templateCache. Я сделал конфиг/Инициализаторы/haml.rb файл со следующим:

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

Тогда в моей конфигурации/application.rb, я добавил config.assets.paths << Rails.root.join('app', 'assets', 'templates').

Я также переименовал свой файл шаблона от api-list.haml до api-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 помощники, чтобы получить путь.

+1

Вы можете просто сделать файл 'routes.js.coffee.erb', чтобы использовать coffeescript, а также использовать помощник rails –

3

Причина, по которой у вас возникли проблемы с templateCache, заключается в том, что маршруты находятся в блоке конфигурации. Если вы обратитесь к документации AngularJS о modules, вы увидите следующую строку:

только провайдеры и константы могут быть введены в блоки конфигурации. Это делается для предотвращения случайного создания служб, прежде чем они будут полностью настроены.

Смежные вопросы