ruby-on-rails - 在 Angular 脚本中重用 Rails 部分?

标签 ruby-on-rails ruby-on-rails-4

我正在尝试实现 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/

相关文章:

ruby-on-rails - rails + Postgres : How to select count of how many records are updated or inserted?

ruby-on-rails - rails 使用! route 的(感叹号)

javascript - Angular ng-token-auth,发布到错误的本地主机

ruby-on-rails - 搜索给定不同货币价格范围的型号

ruby-on-rails - 在 Rails 4 中扩展数组而不创建新类

ruby-on-rails - 如何在没有规范框架的情况下使用 Minitest 首先测试工厂?

sql - ActiveRecord:find_by_sql 并包括

ruby-on-rails - heroku 上的 Rake searchkick reindex 不起作用

mysql - 如何结合SQL查询的where和order

ruby-on-rails - 在 Rails 中使用 partials