我正在尝试简化使用 AngularJS 生成表单的方式。
我的最终目标是能够写出类似的东西:
<form>
<field-div label="Name">
<field which="form.name"></field>
</field-div>
<field-div label="Language">
<field which="form.language"></field>
</field-div>
</form>
为此,我使用了两个指令 (fieldDiv
和field
) 和两个 JavaScript 对象:一个表示表单中正在编辑的数据,另一个表示表单定义(字段类型、字段选项...)。
有关代码,请参见此 JSFIDDLE:http: //jsfiddle.net/vincedo/9Uf6C/
在我的头撞到墙上几次之后,我想我成功了。主要的困难是让 Angular 将字符串——我从我的表单定义对象(例如"entity.name"
)中获得——作为具有双向数据绑定的范围属性。
我还有两个问题:
- 这是正确的方法吗?更具体地说,我的代码
scope.$watch
每个字段使用两个,我担心它可能会影响性能。 - 在我的表格中,为什么“语言”字段中没有选择“英语”?这一定是一个愚蠢的错误:HTML 源代码使用 0, 1, 2... 作为
<option>
值,而我的代码使用字符串键,例如en
,fr
... 但是在尝试将我的头绕在 $wrap 和 $parse 上这么多个小时之后,我没看到。:-)
谢谢!