我有一个带有隔离范围的指令(以便我可以在其他地方重用该指令),当我将此指令与一起使用时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
创建从父作用域继承的原型作用域,而使用我的指令的isolate-scope? - 为什么
2000
我的指令中的优先级不起作用? - 使用Batarang,是否可以知道正在使用哪种类型的示波器?
ng-repeat
。我认为能够将独立指令与混合使用非常有价值ng-repeat
。待续...
ng-repeat
不应具有范围。ng-repeat
具有作用域对于典型用例确实有意义,因此我不建议更改它。相反,就像我在Alex Osborn的答案中评论的那样,我认为我将基于该重复指令ng-repeat
创建自身的范围。然后可以将其用于重复指令,这些指令具有自己的隔离范围。待续...
ng-repeat
还是自定义的无作用域重复指令。我认为“调用方”知道这一点是可以的,但是“被调用方”(被重复的指令)知道是否被重复是不可行的。待续...
scope: true
您为指令使用。另请参阅(如果尚未使用的话)stackoverflow.com/questions/14914213/… 另外,仅因为指令将在多个地方使用并不意味着我们应该自动使用隔离范围。