当前位置: 首页 > 面试题库 >

嵌套和重复的angularjs指令中链接函数的调用顺序

勾通
2023-03-14
问题内容

我对Javascript编程还很陌生,只接触过AngularJS。为了对其进行评估,我决定编写一个简单的note应用程序。该模型非常简单,它是一个注释列表,其中每个注释都有一个标签,一个文本和一个标签列表。但是,我遇到了在嵌套指令的隔离范围之间传递数据的问题。

我有三个指令,注释,注释和标记(定义具有相同名称的新元素)。他们每个人都使用隔离范围。

notes指令使用ng-repeat来“渲染”其带有note元素的每个注释。

note指令使用tagger元素“呈现”标签列表。

note指令定义了范围:{getNote:“&”,…},以便将注释实例从注释列表传递到注释控制器/指令。在note指令的链接函数中调用getNote(index)函数。这样很好!

tagger指令定义范围:{getTags:“&”,…},以便将给定注释的标签列表传递给tagger控制器/指令。在tagger指令的链接函数中调用getTags函数。这行不通!

据我了解,问题在于指令的链接函数以不一致的顺序被调用。对该应用程序进行调试,显示链接函数按以下顺序调用:

  1. notes指令中的链接函数(将getNote函数添加到notes范围)

  2. 第一个注释的tagger指令中的链接函数(在父注释范围中调用getTags)函数

  3. 第一个note指令中的link函数(将getTags添加到范围)(在父Notes范围中调用getNote)

  4. 第二个注释的tagger指令中的链接函数(在父注释范围中调用getTags)函数

  5. 第二个note指令中的link函数(将getTags添加到范围中)(在父Notes范围中调用getNote)

这将不起作用,因为在第二个注释中,第一个注释的范围还没有getTags函数。

在Plunker中可以找到一个简单的例子。

因此,我的问题归结为:是什么决定了嵌套指令中链接函数的调用顺序。

(我在tagger指令中的getTags上使用$ watch解决了这个问题…)

问候


问题答案:

引用乔什·D·米勒(Josh D. Miller)的话,他曾回答过我一个类似的问题:

“仅是一些技术说明。假设您具有以下标记:

<div directive1>
  <div directive2>
    <!-- ... -->
  </div>
</div>

现在,AngularJS将通过以一定顺序运行指令函数来创建指令:

指令1:编译

指令2:编译

指令1:控制器

指令1:预链接

指令2:控制器

指令2:预链接

指令2:链接后

指令1:链接后

默认情况下,直接的“链接”功能是后链接,因此,外部指令1的链接功能将在内部指令2的链接功能运行后才能运行。这就是为什么我们说在后链接中进行DOM操作是唯一安全的原因。”



 类似资料:
  • 问题内容: 指令功能的执行顺序是什么?该文档似乎没有解决此问题。 防爆 template / templateUrl(已评估) 控制器 编译 链接 从下面的答案中:http ://plnkr.co/edit/79iyKSbfxgkzk2Pivuak(插件显示嵌套和兄弟指令) 模板被解析 (在编译中对模板所做的更改会扩展到链接功能) 问题答案: 预链接功能:在链接子元素之前执行。执行DOM转换并不安

  • 问题内容: 我首先尝试使用AngularJS自定义指令。 我在指令的链接功能中使用(或理解…)隔离范围时遇到麻烦。 这是我应用程序这部分的代码: view.html 是在viewCtrl范围内发布的变量,其中包含请求的xml字符串。 rawData.js raw-data.html 我不明白为什么弹出模式时会显示ID正确,但是当我尝试使用它时,其值是不确定的。 也许我对隔离的范围值(和)错了。 感

  • 我想使用Angular 2中的将Firebase查询的结果绑定到我的模板。这在下面很容易实现。 组件: 模板: 但如果我想使用模板中嵌套的另一个指令来列出子对象的键... 我得到控制台错误, 在我的数据库结构中,是的子级,而是的子级,其中是动态键。因此我无法使用直接路径来访问。 这种嵌套指令的模式在简单迭代本地文件的服务中运行良好。为什么它在这里不起作用对我来说似乎有点模糊。

  • 问题内容: 尝试在指令的链接函数中使用与号&来调用传递给指令的函数时遇到问题。 似乎在控制器上调用了该函数,但在调用中未传递任何参数。我们看到的所有示例都涉及通过在模板中创建调用来进行传递。有没有一种方法可以从其模板的指令中调用指令中的函数,然后在指令中执行某些操作,以调用传递给它的控制器函数? 问题答案: 您是否在s中传递了参数?例如,在指令的链接函数中,您将希望像这样调用方法: jsfiddl

  • 问题内容: 我有一个关于在嵌套函数方案中如何处理“ this”指针的问题。 假设我将以下示例代码插入到网页中。当我调用嵌套函数“ doSomeEffects()”时出现错误。我检查了Firebug,它表明当我使用该嵌套函数时,“ this”指针实际上指向全局“ window”对象,这是我所没有想到的。我一定不能正确理解某些东西,因为我认为自从我在对象的函数中声明了嵌套函数以来,它就应该具有相对于该

  • 问题内容: 我有一个简单的指令,其中模板在其中使用ng-repeat。我需要运行一些代码来针对ng- repeat指令创建的某些元素实例化jquery组件。问题是,如果我将此代码放在链接函数中。ng-repeat尚未构建这些元素,因此未实例化任何内容。 该模板如下所示。我正在尝试附加 我尝试使用$ watch()和$ observe()在域更改时注册回调,然后实例化工具提示代码。但是,我似乎无法在