【发布时间】:2014-05-27 01:45:40
【问题描述】:
我正在尝试简化使用 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 这么多小时,我没有看到。 :-)
谢谢!
【问题讨论】:
-
您需要正确更新您的小提琴,您的链接会打开一个空的 Angular fiddle 模板。
-
@supermasher:感谢您指出这一点!这是我的第一个 jsFiddle,我认为它们会自动更新。它现在应该可以工作了。
-
我有一个我认为更好的解决方案,但由于您的模型参考包含“实体”,因此我现在无法使其工作。您可以编辑此表单定义以仅返回(例如)“名称”吗?
-
@Galdo:对不起,我不明白你的意思。你想让我编辑
$scope.form对象以便只保留“名称”键吗? -
在您的模型中,您有一个来自其他地方的表单定义。您可以编辑此架构还是必须适应它?为了使我的解决方案起作用,线模型:'entity.name',必须更改为模型:'name',
标签: angularjs angularjs-directive