【发布时间】:2015-01-11 01:30:58
【问题描述】:
Bootstrap selectpicker 隐藏原始选择并创建附加元素,用来自选择的选项填充它。但是,当使用 ngOptions 时,selectpicker 不会自动更新。
所以我创建了一个指令来监听 ngOptions 集合的变化并调用element.selectpicker()
如果没有对 ngOptions 应用过滤,它可以正常工作。否则,每次调用 filering 函数时都会返回新数组,这会导致 $watch 回调触发,从而重新创建 selectpicker。 Angular 检测到 DOM 已更改并开始新的摘要循环,从而有效地无限循环该过程。在 10 次迭代后,Angular 会按预期抛出异常。
我需要在创建 selectpicker 时暂时取消订阅手表,然后在摘要周期完成后再次订阅。有可能吗?
更新1
想多了,现在有一个想法可以尝试。 Filter 定义了一个工厂返回过滤函数,因此我可以使用捕获的数组来存储过滤后的内容 - 引用不会改变,因此监听器只会在集合内容发生变化时触发。
【问题讨论】:
-
我知道这并不完全是您问题的答案,但您总是可以为您的下拉菜单选择自定义路线并完全避免问题......再次,无耻(开始变得可耻)插头 -_- matterickson.me/dropdowns_selectboxes
标签: javascript angularjs twitter-bootstrap angularjs-directive reentrancy