我正在尝试实现 Ajax 功能。我正在使用 Angular,并且我想重用我已经拥有的许多 Rails 部分(例如表单)。但根据我从研究中了解到的情况,Rails 的 render
方法无法在 Assets 管道中的 JavaScript 内部访问。
我的想法是,在触发某些事件(onsubmit、onclick 等)后,用适当的部分替换所选元素的innerHTML。
我见过的其他答案涉及使用 *.js.erb
文件作为 View ,但这种方法似乎不能很好地扩展——我拥有的 Ajax 调用越多, Controller 方法就越多以及我必须设置的路线,这听起来像是一场噩梦的开始。
那么这是否意味着唯一的前进方法是将 Rails 部分复制到 Angular 模板中,然后我可以将其与我的 JavaScript 一起使用,或者我还有什么其他选项?
我正在寻找的不是代码,只是关于如何修补事物的高级概念概述。
请指教。
最佳答案
当我第一次开始使用 Angular 和 Rails 时,我尝试采用您现在正在尝试的方法。不幸的是,这从未产生可接受的结果。问题是 - Angular 必须始终知道您的数据发生了什么。当您通过 AJAX 渲染 erb 部分时,Angular 和 Rails 无法按预期进行通信,并且调试起来非常困难。以下是我推荐的高级选项:
<强>1。严格使用 Rails 作为 API
这种方法是大多数 Rails/Angular 应用程序的构建方式。忘记 Rails 中的任何前端 View 或 Controller 。只需构建一个后端 API 来处理请求并提供 JSON 数据。 Angular 处理前端的所有内容,包括通过 ngResource 的路由。使用 Angular 模板代替 Rails 部分。 angular-rails-template gem 有助于将模板放入 Assets 管道中。这种方法的好处是您拥有一个可以扩展到其他前端的纯 API,例如 native iOS 应用程序。您还将看到服务器端性能的提升。
<强>2。混合 Angular 和 Rails,但忘记 AJAX
如果必须将 erb View 与 Angular 混合使用,请避免使用 remote: true
或 ajax 渲染。 Angular 对于表单验证和单页内容仍然非常有效。 Turbolinks 在 Rails 社区中名声不佳,但实际上在这种情况下效果很好。异步页面加载感觉就像一个 JS 前端,同时允许 Angular 在页面加载后进行编译。不理想,但有可能。
Shopify 跳过了 Angular,并使用 Turbolinks(涡轮移植)的分支构建了令人印象深刻的界面,并且它的许多功能预计会出现在 Rails 5 中。 Check out this post 。
关于ruby-on-rails - 在 Angular 脚本中重用 Rails 部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32365209/