这个链接函数如何知道“;tabsCtrl"参考文献

How does this link function know what "tabsCtrl" references?

本文关键字:tabsCtrl quot 参考文献 何知道 链接 函数      更新时间:2023-09-26

阅读AngularJS文档时,我在标题为"创建通信指令"的部分中看到了这篇文章的信息。。。进一步看这个例子的js代码,我们看到它们传递了一个对另一个指令中使用的控制器的引用,但它们没有解释为什么它能工作,也没有解释如何正确使用它(怎么回事,伙计?)。

那么,为什么会这样呢?如果我的指令没有链接在一起/在单独的文件中,它会起作用吗?如果他们都在不同的地方注册到一个模块怎么样?这似乎是一个奇怪的地方。。

link: function(scope, element, attrs, tabsCtrl) {
    tabsCtrl.addPane(scope);

Tl;DR它如何知道Ctrl引用了哪些选项卡???

答案在文档中:

myPane指令有一个值为^myTabs的require选项。当指令使用此选项时,$compile将抛出错误,除非找到指定的控制器。^前缀表示此指令在其父控制器上搜索控制器(不带^前缀指令将仅在其自己的元素上查找控制器)。

那么这个myTabs控制器是从哪里来的呢?指令可以指定控制器使用毫不意外命名的控制器选项。作为你可以看到,myTabs指令使用了此选项。就像ngController,此选项将一个控制器附加到指令。

回顾myPane的定义,请注意其链接函数:tabsCtrl。当指令需要控制器时接收该控制器作为其链接函数的第四个自变量。利用这一点,myPane可以调用的addPane函数myTabs。

将其转换为人类语言:myPane中的require: '^myTabs'myTabs(好吧,myTabs应该是myPane的父指令)指令中搜索控制器,并将其作为第四个参数传递给myPane中的link: function()