加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS:动态添加的字段未在FormController上注册

发布时间:2020-12-17 08:30:42 所属栏目:安全 来源:网络整理
导读:我在AngularJS中有以下静态形式: form name="myForm" class="form-horizontal" labelFirst Name:/label input type="text" name="first_name" ng-model="entity.first_name" labelLast Name:/label input type="text" name="last_name" ng-model="entity.la
我在AngularJS中有以下静态形式:
<form name="myForm" class="form-horizontal">

  <label>First Name:</label>
  <input type="text" name="first_name" ng-model="entity.first_name">

  <label>Last Name:</label>
  <input type="text" name="last_name" ng-model="entity.last_name">

</form>

Angular为我创建一个FormController并将它发布到范围中(在表单名称下)。这意味着我可以访问如下属性:

$scope.myForm.first_name.$error
$scope.myForm.last_name.$invalid
...

这是超级有用!

但在我的case我使用指令动态建立一个表单:

<form name="myForm" class="form-horizontal">

  <field which="first_name"></field>
  <field which="last_name"></field>

</form>

< field>指令不解析为实际的< input>元素,直到一段时间后(我从服务器获取一些数据,链接指令等)。

这里的问题是没有字段属性在表单控制器上定义,好像动态字段没有注册到FormController:

// The following properties are UNDEFINED (but $scope.myForm exists)
$scope.myForm.first_name
$scope.myForm.last_name

任何想法为什么?任何解决方案/解决方法?

你可以看到这个jsFiddle中的整个代码:
http://jsfiddle.net/vincedo/3wcYV/

更新7/31/2015这已经修复从1.3,参见这里: https://github.com/angular/angular.js/issues/1404#issuecomment-125805732

原始答案
这是不幸的是,AngularJS的一个短暂的来临。 Angular的表单验证不适用于动态命名的字段。您可以在HTML底部添加以下内容,以查看发生了什么:

<pre>{{myForm|json}}</pre>

正如你可以看到,Angular没有得到动态输入名称。目前有一个涉及嵌套表单的工作,可以得到一种讨厌,但它的工作和(有一点额外的工作)将提交父表单没有麻烦。

如果你想,你可以鼓起更多的支持的问题:GitHub Issue – dynamic element validation.无论哪种方式,这里的代码:

http://jsfiddle.net/langdonx/6H8Xx/2/

HTML:

<div data-ng-app>
    <div data-ng-controller="MyController">
        <form id="my_form" name="my_form" action="/echo/jsonp/" method="get">
            <div data-ng-repeat="field in form.data.fields">
                <ng-form name="form">
                    <label for="{{ field.name }}">{{ field.label }}:</label>
                    <input type="text" id="{{ field.name }}" name="{{field.name}}" data-ng-model="field.data" required>
                    <div class="validation_error" data-ng-show="form['{{field.name}}'].$error.required">Can't be empty.</div>

                </ng-form>
            </div>
            <input type="submit" />
        </form>
    </div>
</div>

JavaScript:

MyController.$inject = ["$scope"];

function MyController($scope) {
    $scope.form = {};
    $scope.form.data = {};
    $scope.form.data.fields = []

    var f1 = {
        "name": "input_1","label": "My Label 1","data": ""
    };
    var f2 = {
        "name": "input_2","label": "My Label 2","data": ""
    };

    $scope.form.data.fields.push(f1);
    $scope.form.data.fields.push(f2);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读