在Angular中使用ng-repeat进行动态模型和脏检查
Dynamic models and dirty checking with ng-repeat in Angular
我正在做一些我认为相对直接的事情,但是Angular没有为我正确地工作。我很肯定这是可以做到的。我想我只是遗漏了一些东西。
从本质上讲,我已经在Angular中创建了一个表单服务,在那里我可以定义一个对象数组来动态创建表单。一个这样的例子如下:email: [
{
name: 'email',
type: text,
required: true
}
]
这可以表示某人将在其中输入电子邮件的表单。我想做的是运行ng-repeat
,并添加一些Angular脏检查,如下所示:
<form name="form">
<span ng-repeat="fields in formFields">
<input name="{{field.name}}
ng-model="user[field.name]" />
<div ng-show="form.{{field.name}}.$dirty">Input is dirty</div>
</span>
</form>
然而,由于某些原因,这不起作用。我已经尝试了几种不同的组合,但没有运气。我正在遵循我在Angular文档中看到的示例:https://docs.angularjs.org/guide/forms
这是一个摆弄当前代码:http://jsfiddle.net/HB7LU/4764/…正如您所看到的,双向绑定在ng-repeat
中工作,而不是脏检查。在前面的示例中,脏检查正在工作。
我在这里做错了什么?
你可以添加<span ngForm="myForm">
来处理这个
它可以处理多个输入元素,但请参阅末尾的注释。
这是一个更新的小提琴显示这个解决方案:http://jsfiddle.net/HB7LU/4766/
<div ng-controller="MyCtrl">
<form name="form">
<input name='myInput' ng-model='model.myInput'>
<div ng-show='form.myInput.$dirty'>Dirty</div>
<!-- 1. Add `ng-form="myForm"` directive. -->
<span ng-form="myForm"
ng-repeat='field in email'>
<input ng-model="field[email.name]" name={{email.name}} />
{{field[email.name]}}
<!-- 2. Reference the named parent -> `myForm.$dirty` -->
<div ng-show="myForm.$dirty">It's dirty!</div>
</span>
</form>
</div>
请注意,您最终将从form.myForm
获得单个myForm
实例-如果您需要从form
访问单个myForm
实例,您将需要使用自定义指令来处理此问题(请参阅我对您的问题的评论)。
相关文章:
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 如何为动态创建的文本区域中输入的值更新ng模型
- EmberJS-适用于各种模型的适配器动态名称空间
- 在extJS 4.2中,有没有一种方法可以将模型值动态绑定到表单
- 为各种模型动态创建隐藏的表单字段(MVC 4)
- 具有ng重复的动态ng模型
- ng重复中的动态ng模型
- 如何在打开模型时动态加载控制器文件
- 如何在角度 2 中向动态加载的子组件提供父组件的模型
- 在Waterline中动态定义和获取模型
- 构建淘汰模型并动态查看,不设置单选按钮
- 角度动态 ng 模型名称
- 通过json动态绑定作用域到ng模型
- 如何使用ng重复和ng模型将动态值绑定到输入
- angularjs中ng模型的动态创建
- 使用数组中的嵌套对象在AngularJS中切换用于动态选择菜单的数据模型
- 如何使用递增的 ng 模型动态创建多个表单输入字段
- 如何使用 JavaScript 使用 AngularJS 模型动态添加新输入
- 如何在MVC3中将字符串从模型动态加载到javascript
- Angular 2/Ionic 2ng模型动态全局变量