javascript - Angular - 从 Controller 访问动态创建的表单元素

标签 javascript angularjs forms angularjs-ng-repeat

我有一个简单的表单,由 ng-repeat 生成:

<form name="myForm">
    <button ng-click="addFormElement()">+</button>

    <div ng-repeat="model in models">
        <input type="text" name="formElement{{$index}}" ng-model="model.value" />
    </div>
</form>

通过单击“加号”按钮添加新元素。这是代码:

$scope.addFormElement = function() {
    $scope.models.push({ value: "test"});

    console.log($scope.myForm);
    for (var i = 0; i < $scope.models.length; i++) {
        console.log($scope.myForm["formElement"+i]);
    }
};

问题:在第一个控制台日志中,我可以看到当前添加的新输入字段,但是当我尝试在 for 循环中打印具体元素时,它会记录“未定义”。当我添加更多元素时,最后一个(当前添加的)总是在第一个日志中定义,但在第二个日志中未定义。你知道为什么吗?

Printscreen of logs here

最佳答案

我制作了一个 plnkr,您可以在其中找到解决方案:

$timeout(function(){
  for (var i = 0; i < $scope.models.length; i++) {
    console.log($scope.myForm["formElement"+i]);
  } 
});

https://plnkr.co/edit/oTttVJrAOiSRn3jfde5q

您应该在 $timeout 内调用它。您需要它来等待 Angular 的下一个摘要周期。在内部 $timeout 将调用 $apply 并强制同步双向数据绑定(bind)。

关于javascript - Angular - 从 Controller 访问动态创建的表单元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37441785/

相关文章:

javascript - 按需加载选项卡内容,例如 Youtube?

javascript - 获取整数数组中的第一个最小自由整数键/id

javascript - 尝试将 Braintree 嵌套回调转换为 NodeJS 异步/等待语法

javascript - 范围错误: Maximum call stack size exceeded - Google Maps Api

forms - 带有字段集的多列表单

html - 如何防止 <form></form> 中的换行符/换行符?

java - 寻找一个好的、实用的例子,如何在 Java Web 应用程序中使用 JQuery 或 YUI

django - Angular NgRessource 具有来自 django Rest 框架的分页结果

javascript - 如何处理 DjangoCMS i18n URL (/en/my_page,/fr/my_page...) 和 AngularJS?

javascript - 表单提交后运行脚本和php