我在Ruby .erb视图中有角度ng-repeat
。
现在,我需要对一个专用于某个IP地址的页面进行link_to。
首先我试过
<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工作正常。
请不要设计建议a-la'从头开始重写你的应用'。
答案 0 :(得分:2)
我认为你有点混淆两个独立的概念 - 渲染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()方法可以用于此。我不完全确定你是否可以直接在模板中使用它,它可能仍然需要在控制器中调用。