Angular + .nghaml 模板:引用预编译的图像资产

Posted

技术标签:

【中文标题】Angular + .nghaml 模板:引用预编译的图像资产【英文标题】:Angular + .nghaml template: Referencing Precompiled Image Assets 【发布时间】:2014-07-29 05:43:29 【问题描述】:

我将 .nghaml 用于我的模板并使用以下 gem 进行 Angular 集成:

gem 'angularjs-rails'
gem 'angular-rails-templates'

我的 Rail 视图布局是 name.html.haml,在其中使用 image_tag 效果很好。在生产中,我可以看到图像。

相比之下,在我的带有 .nghaml 扩展名的 Angular 模板(资产/模板)中,我不能使用 Rails 帮助程序 image_tag 并且直接引用不起作用

%image(src="assets/sample_image.png")

直接引用在本地工作,但在生产图像上不渲染。

此人 (Rails Image assets in Angular Directive and template) 也有类似的问题,但使用的是

%img(ng-src='assets/sample_image.png') 

在本地工作,但不在生产中。并且尝试使用 image-url 会导致未定义方法的错误(就像 image_tag 一样),因为似乎没有一个 Rails 助手在 .nghaml 扩展中工作。

正在工作的图像(带有 image_tag 助手的 Rails 视图)正在引用预编译的资产,这些资产的名称随着 md5 哈希的添加而改变(基于第一篇链接的文章),但我在弄清楚在没有 Rails 辅助方法的情况下,如何告诉 nghaml 模板调用了哪些新的预编译资产。

几个月前,我在帮助者 (Rails App to Angular: HAML + Rails Helpers) 中遇到了这个问题,但没有找到解决方案,但直到最近才需要将图像放入 nghaml 模板中,而不仅仅是使用 CSS 创建我需要的东西。

如果我无法弄清楚这一点,我目前正计划将角度模板移回 erb,但如果有我不知道的替代方案(或解决方案),我很想听听。

【问题讨论】:

【参考方案1】:

Rails App to Angular: HAML + Rails Helpers 帖子中提出的解决方案将允许您在生成客户端 html 文件时在 haml 文件中使用帮助程序(包括 image_tag 帮助程序)。

【讨论】:

【参考方案2】:

一个问题:根据 angular-rails-template 库的官方 repo,the .nghaml extension is no longer supported。您必须将其重命名为.haml

更大的问题是您使用 Rails 来提供单页 JS 应用程序。不需要这个,您可以使用 nginx 或 Apache 为站点提供服务并控制缓存并在那里进行缓存清除 (nginx & apache cache busting tutorial)

如果您将 Rails 用于 REST API,则应将其与您的前端 AngularJS 应用程序分离。

如果你想在模板中做一些花哨的东西,除了缓存破坏,你应该在 JS 和纯 HTML 中做。这很奇怪,但与 Rails 和 Django 以及服务器端 MVC 框架相比,AngularJS 和其他前端 MVC/MVVM 框架是不同的野兽。

【讨论】:

以上是关于Angular + .nghaml 模板:引用预编译的图像资产的主要内容,如果未能解决你的问题,请参考以下文章

Angular 6:如何使用模板引用变量来调用子方法?

ngFor(Angular 9)中的动态模板引用变量

模板中的Angular 2重复组件引用另一个元素

Angular:为组件字段提供对服务功能的引用并从模板调用它无法按预期工作

如何从Angular 2中的子组件事件触发父组件中的本地引用?

如何创建像 Angular 2 那样的模板变量?