我对 Javascript 编程相当陌生,我只接触过 AngularJS。为了评估它,我决定编写一个简单的笔记应用程序。该模型非常简单,一个笔记列表,其中每个笔记都有一个标签、一个文本和一个标签列表。但是,我遇到了在嵌套指令的隔离范围之间传递数据的问题。
我有三个指令,注释、注释和标记器(定义具有相同名称的新元素)。他们每个人都使用一个孤立的范围。
notes 指令使用 ng-repeat 用 note 元素“渲染”它的每一个音符。
note 指令使用 tagger 元素来“渲染”标签列表。
note 指令定义范围:{ getNote: "&", ... } 以便将笔记实例从笔记列表传递到笔记控制器/指令。getNote(index) 函数在 note 指令的链接函数中调用。这很好用!
标记器指令定义范围:{ getTags: "&", ... } 以便将给定注释的标记列表传递给标记器控制器/指令。getTags 函数在 tagger 指令的链接函数中调用。这不起作用!
据我了解,问题在于指令的链接函数以不一致的顺序调用。调试应用程序显示链接函数按以下顺序调用:
notes 指令中的链接函数(将 getNote 函数添加到 notes 范围)
第一个注释的 tagger 指令中的链接函数(在父注释范围内调用 getTags)函数
第一个注释指令中的链接函数(将 getTags 添加到范围)(在父注释范围内调用 getNote)
第二个注释的 tagger 指令中的链接函数(在父注释范围内调用 getTags)函数
第二个注释指令中的链接函数(将 getTags 添加到范围)(在父注释范围中调用 getNote)
这将不起作用,因为在 #2 中第一个注释的范围还没有 getTags 函数。
一个简单的例子可以在Plunker中找到。
因此,我的问题归结为:什么决定了在嵌套指令中调用链接函数的顺序。
(我在 tagger 指令中的 getTags 上使用 $watch 解决了这个问题......)
问候