如何将表单明确作为函数参数传递

时间:2014-10-19 23:26:19

标签: angularjs

Angular 1.3.0。我试图在表单上使用$setPristine方法,麻烦的是我在同一页面上有多个相似的表单,每个表单都有一个动态名称。我能够找到的$setPristine的每个示例都使用以下语法:$scope.myFormName.$setPristine()。我可以尝试通过将动态表单名称的变量部分传递给函数来执行动态eval,以便它可以使用myFormName语法。但似乎将表单明确地传递给函数似乎更清晰,更不用说比使用$ scope更可测试了。

我想要的是什么:

HTML

... loop over things
<form name="thing_form_{{thing.id}}">
... inputs and stuff
    <input type="submit" ng-click="thing = reloadThing(thing, thisform); " value="Do">
</form>

的CoffeeScript

$scope.reloadThing = (thing, form) ->
        ... do stuff
        form.$setPristine()

1 个答案:

答案 0 :(得分:0)

您可以将表单名称作为字符串传递,并使用它将表单设置为pristine ...

HTML

... loop over things
<form name="thing_form_{{thing.id}}">
    ... inputs and stuff
    <input type="submit" ng-click="thing = reloadThing(thing, 'thing_form_' + thing.id ); " value="Do">
</form>

的CoffeeScript

$scope.reloadThing = (thing, formName) ->
        ... do stuff
        $scope[formName].$setPristine()

更新

如果您绝对需要将表单对象传递给函数而不是在范围内进行评估,则可以在ngrepeat中使用this从模板访问$scope。所以你最终会得到这样的东西:

HTML

... loop over things
<form name="thing_form_{{thing.id}}">
    ... inputs and stuff
    <input type="submit" ng-click="thing = reloadThing(thing, this['thing_form_' + thing.id] ); " value="Do">
</form>

的CoffeeScript

$scope.reloadThing = (thing, form) ->
        ... do stuff
        form.$setPristine()