【问题标题】:Ruby view accessing angular.js variableRuby 视图访问 angular.js 变量
【发布时间】:2015-08-07 10:55:31
【问题描述】:

我在 Ruby .erb 视图中有角度 ng-repeat。 现在,我需要创建一个链接到一个页面,专用于某个 IP 地址。 首先我尝试了

<td><%= link_to '{{ roll.system }}' ,'server/'+'{{ roll.system }}' %></a></td>,

其中{{roll.system}} 是包含ip 的angular.js 变量。 总体路径类似于localhost/server/127.0.0.1,并且由于 IP 地址中的点而无法正常工作。现在,我正在尝试对 IP 地址进行哈希处理,然后在路由完成后对其进行解码。

我当前的代码是:

<td><%= link_to '{{ roll.system }}' ,"server/"+Base64.urlsafe_encode64('{{ roll.system }} %></a></td>

这就是问题所在。 Base64 按原样对字符串进行编码,创建文字字符串'{{ roll.system }}' 的散列。我需要它来查找它在角度变量中引用的值。

我不明白为什么会出现问题,因为 link_to 工作正常。

请不要提供“从头开始重写您的应用程序”这样的设计建议。

【问题讨论】:

标签: javascript ruby-on-rails ruby angularjs erb


【解决方案1】:

我认为你有点混淆了两个独立的概念——Rails 视图的渲染和 Angular 的播放。

当您点击应用时,您的第一个建议将呈现 Rails 视图并将您的 link_to 转换为原始 HTML:

<td><a href="{{ roll.system }}/server/{{ roll.system }}"></a></td>

一旦 rails 渲染了视图并将页面返回给浏览器,您的 Angular 代码就会启动,找到 {{ roll.system }} 调用并将其修改为:

<td><a href="127.0.0.1/server/127.0.0.1"></a></td>

第二次尝试的问题在于Base64.urlsafe_encode64 将在渲染Rails 视图时运行,因此此时Angular 不会替换roll.system。因此,无论 roll.system 是什么,您最终都会得到这个原始 HTML:

 <td><a href="{{ roll.system }}/server/e3sgcm9sbC5zeXN0ZW0gfX0="></a></td>

相反,您可能想尝试在 Angular 中对字符串进行 base64 编码。所以你可能想考虑使用angular-base64 之类的东西。您可以使用它来执行以下操作:

<td><a href="{{ roll.system }}/server/{{ roll.encoded_system }}"></a></td>

您在 Angular 控制器中设置 roll.encoded_system 的位置。正如 Martin 在下面提到的,有一个原生的 window.btoa() 方法可以用于此。我不完全确定你是否可以直接在模板中使用,它可能仍然需要在控制器中调用。

【讨论】:

  • 谢谢马丁,我在主要答案中添加了一条注释。
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 2018-06-28
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多