我有一个带有隔离范围的指令(以便我可以在其他地方重用该指令),当我将此指令与 一起使用时ng-repeat
,它无法工作。
我已阅读有关此主题的所有文档和 Stack Overflow 答案并了解这些问题。我相信我已经避免了所有常见的陷阱。
所以我知道我的代码由于ng-repeat
指令创建的范围而失败。我自己的指令创建了一个隔离作用域,并对父作用域中的对象进行双向数据绑定。我的指令将为这个绑定变量分配一个新的对象值,并且当我的指令不使用ng-repeat
(父变量正确更新)时,这可以完美地工作。但是,使用ng-repeat
时,赋值会在ng-repeat
范围内创建一个新变量,而父变量看不到更改。根据我所阅读的内容,所有这些都符合预期。
我还读到,当给定元素上有多个指令时,只会创建一个范围。并且priority
可以在每个指令中设置 a 来定义指令的应用顺序;指令按优先级排序,然后调用它们的编译函数(在http://docs.angularjs.org/guide/directive搜索单词优先级)。
所以我希望我可以使用优先级来确保我的指令首先运行并最终创建一个隔离范围,并且在ng-repeat
运行时,它重新使用隔离范围,而不是创建一个原型继承自父范围的范围。ng-repeat
文档声明该指令以优先级运行1000
。不清楚1
是更高的优先级还是更低的优先级。当我在指令中使用优先级1
时,它没有任何区别,所以我尝试了2000
. 但这让事情变得更糟:我的双向绑定变成undefined
了,我的指令不显示任何东西。
我创建了一个小提琴来展示我的问题。priority
我已经在我的指令中注释掉了设置。我有一个名称对象列表和一个名为的指令,该指令name-row
显示名称对象中的名字和姓氏字段。单击显示的名称时,我希望它selected
在主范围内设置一个变量。名称数组、selected
变量name-row
使用双向数据绑定传递给指令。
我知道如何通过在主范围内调用函数来使其工作。我也知道,如果selected
在另一个对象内部,并且我绑定到外部对象,事情就会起作用。但我目前对这些解决方案不感兴趣。
相反,我的问题是:
- 如何防止
ng-repeat
创建原型从父范围继承的范围,而是让它使用我的指令的隔离范围? - 为什么
2000
我的指令中的优先级不起作用? - 使用 Batarang,是否有可能知道正在使用什么类型的范围?