访问angular.js变量的Ruby视图

Ruby view accessing angular.js variable

本文关键字:Ruby 视图 变量 angular js 访问      更新时间:2023-09-26

我已经有角ng-repeat在Ruby .erb视图。现在,我需要创建一个指向某个IP地址的页面的link_to。首先我试着

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

其中{{roll.system}}是angular.js变量,包含ip. 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工作正常。

我认为你有点混淆了两个独立的概念——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()方法可以用于此。我不完全确定是否可以直接在模板中使用,但它可能仍然需要在控制器中调用。