【发布时间】:2014-04-16 08:18:42
【问题描述】:
我正在为选择元素创建一个新指令。作为最佳实践,我想从服务器接收一些选项和一个我想在客户端代码中创建的选项,例如“搜索所有汽车”。
这是我想要的外观示例:
<select>
<option value="">Search all cars</option>
<option value="aud">Audi</option>
<option value="bmw">BMW</option>
<option value="maz">Mazda</option>
</select>
“搜索所有汽车”的值为空很重要。
但即使我在选择中添加了一个空元素(参考 other SO posts),它仍然给了我一个不需要的选项:
<option value="?" selected="selected"></option>
这是一个plunker example of the issue/bug,它使用了一个带有 transclude 和 replace 的 Angular 指令。
有人建议如何解决这个问题?
我还向 Angular 团队 here 添加了一个问题。
编辑:
我希望将此作为指令的原因是我想根据应用程序中的实施位置来决定是否应该使用“搜索所有汽车”选项。
EDIT2: Angular 团队确认这是一个错误。 “看起来根本原因是如果在初始设置后添加了未知选项,那么它不会替换生成的未知选项” - lgalfaso。
【问题讨论】:
-
我认为这是因为您将默认(空)选项transclude 放入了选择中。从 transclude 的工作原理来看,我猜最终的选择指令根本无法识别注入的默认选项,因此创建了它自己的,因为模型不适合给定选项中的任何值。
-
@Yoshi - 我同意!你知道这是一个角度错误还是功能?
-
我想说这就是它的工作方式(尤其是指令的编译方式)。因此,我认为您必须编写自己的编译方法以将默认选项注入选择而不使用嵌入。
标签: javascript angularjs replace selector transclusion