我有一个用angularjs编写的web应用程序,我希望通过GET请求将各个页面的相应值发送到服务器,但我在页面加载时自动完成。
我的代码片段如下:
<script language="javascript">
function loaded(){
document.getElementById("dataSubmit").submit();
}
</script>
<form id="dataSubmit" action="http://127.0.0.1" method="get" target="submission.frame">
<input name="data" type="hidden" value={{myData}}>
<input type="submit" id="subbut" value="submit">
<iframe name="submission.frame" hidden></iframe>
</form>
<script>
window.onload = loaded();
</script>
上面的代码自动发送名为“data”的输入数据,其值为{{myData}},取决于用户所在的页面,到ip 127.0.0.1,并在此端运行脚本并写入数据到文本文件。
问题在于,当我尝试传递Angularjs表达式{{myData}}时,它不会传递加载页面时自动获取的数据,而是发送字符串文字“{{myData}}”并将其写入另一端的文件。
但是,当我单击我已添加到表单的“提交”按钮时,数据会完美发送,我想要的值会写入文件。 我尝试使用onload函数,以便提交仅在页面加载后发生,因此表达式有时间进行评估但仍然没有运气。
对于那些想知道的人,我的iframe标记使得提交表单不可见,因此当提交发生时,它不会将用户重定向到数据发送到的IP。
为了澄清问题,在页面加载时提交表单时,不会评估角度表达式{{myData}},但是当单击提交按钮时,{{myData}}会计算并发送值。我需要在页面加载时在表单中提交{{myData}}的值。
非常感谢任何帮助。
答案 0 :(得分:0)
您所面临的是一种非常正常的行为,当然页面已完成加载,但Angular没有时间评估模板插值。
说实话,我不确定您要使用该自动表单子目标实现什么,您只需使用$ http服务将数据发送到您想要的任何端点。通过这种方式,您可以确切地知道何时将数据附加到变量上。
如果出于一些非常奇怪的原因,你仍然想要做正常的javascript表单submition,你需要创建一个指令,在其中你将包含$ window服务并添加scome代码,如下所示:
var autoSubmit = function () {
$scope.$watch("myDataVariable", function (newVal) {
if (newVal) {form.submit()}
})
}
$window.bind("onload", autoSubmit);
代码没有经过测试,它是我如何做的样本......好吧,我不会做那样的事情,但你知道我的意思。