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