通过GET请求在表单提交中自动提供AngularJS表达式值

时间:2014-07-18 11:05:49

标签: javascript html5 angularjs

我有一个用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}}的值。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您所面临的是一种非常正常的行为,当然页面已完成加载,但Angular没有时间评估模板插值。

说实话,我不确定您要使用该自动表单子目标实现什么,您只需使用$ http服务将数据发送到您想要的任何端点。通过这种方式,您可以确切地知道何时将数据附加到变量上。

如果出于一些非常奇怪的原因,你仍然想要做正常的javascript表单submition,你需要创建一个指令,在其中你将包含$ window服务并添加scome代码,如下所示:

var autoSubmit = function () {
    $scope.$watch("myDataVariable", function (newVal) {
        if (newVal) {form.submit()}
    })
}
$window.bind("onload", autoSubmit);

代码没有经过测试,它是我如何做的样本......好吧,我不会做那样的事情,但你知道我的意思。