我一直在努力解决如何正确使用ngModelCtrl的问题。
首先,我有一个基于属性列表生成表单的指令。所以我可能有一个实体的属性列表:
[{
"name": "name",
"type": "Text",
"validation": {
"minLength": 1,
"maxLength": 20
}
},
{
"name": "role",
"type": "Entity",
"entity": "Role",
"validation": {
"required": true
}
}]
(如果你熟悉Breeze,这与它的metadata类似,我们很快就会迁移到它,最近发现了它)
使用表单指令生成表单,例如<foo-form ng-model="user" properties="properties"></foo-form>
,properties
就是上面的表单。
这个fooForm
指令基本上遍历这些属性并委托给另一个名为fooPropertyInput
的指令。用法为<foo-property-input ng-model="user.name" property="property"></foo-property-input>
fooPropertyInput
的责任是使用property
对象根据属性中的type
显示适当的输入。因此,如果它是文本,则应显示<input type="text" ng-model="model"...
或类型为Entity,<foo-entity ng-model="model"...
等。最终目标是正确验证,并以fooForm
中定义的形式反映(或者任何其他父表格,如果在fooForm之外使用的话。)
我无法理解如何将ngModel及相关属性传递给最终输入元素。
我已经做了大量的搜索如何以这种方式使用ngModel,但大多数事情都是使用隔离范围,我最初认为这不是与ngModelCtrl一起使用的最佳做法。
任何指针?感谢
编辑: 仍在寻找答案,我根据要求创建了一个Plunker,并附有一些评论:http://plnkr.co/edit/m8th6GNq4CBoFytmkSN0?p=preview
另外,我有一个额外的想法,如果我将每个类型分成它自己的指令(而不是在模板中包含所有内容),并且需要主要的propertyInput控制器,那么更容易实现吗?无论哪种方式,我想我仍然不知道如何链接到HTML输入的ngModel(参见Plunker评论)。