1

我有一个案例,我想为模块化表单创建一个可重用的指令,其中有一个主表单指令旨在与字段输入指令的某种组合一起使用。像这样的东西:

<form-container submit-path="/path/to/api/">
    <input-field label="Foo"></input-field>
    <select-field label="Bar"></select-field>
</form-container>

我会在表单容器上使用隔离范围,它还需要为字段创建一个嵌入范围,但我不确定该字段使用什么。我设想范围层次结构是这样的:

- (1) form-container isolate scope
- (2) form-container transcluded scope
  - (3) input-field scope
  - (4) select-field scope

范围 (1) 将具有从表单收集和发布数据的功能,但它需要访问绑定到范围 (3) 和 (4) 中的表单元素的数据。

这甚至可能吗?

由于首选方法是将模式存储在范围 (2) 中,因此我需要将字段绑定到不同的变量名称,但似乎我无法使用指令的属性在 ng-model 上进行插值。 编辑:似乎我可以在编译函数中手动执行此操作?第二次编辑:一旦这个错误被修复。

此外,表单提交功能无法直接访问范围 (2) 中的数据。您可以使用 $$nextSibling,但显然这是不好的做法。

有没有办法让范围(3)和(4)直接从范围(1)继承?

4

2 回答 2

0

http://plnkr.co/edit/F1e1mKA2UU3EL1M9yaJ0?p=preview

这就是我试图通过使用指令控制器来实现它,并让子指令通过其控制器更新父指令中的值。

我赞成这个问题,因为我不满意并希望看到更好的解决方案。

于 2013-07-08T06:47:48.327 回答
0

我找到了解决方案。我把它贴在这里作为一个新问题的答案,因为我认为我原来的问题措辞很糟糕。

基本上你不需要弄乱嵌入的范围。您只需在表单上使用标签和 ng-controller,或者将范围附加到表单标签的自定义指令。

要在指令中为 ng-model 使用动态值,您必须使用链接函数来修改指令的实例。有关所有详细信息,请参阅解决方案。

于 2013-07-08T15:01:42.023 回答