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

何时在Angular中使用transclude'true'和transclude'element'?

经兴安
2023-03-14
问题内容

什么时候应该使用transclude: 'true'以及何时transclude: 'element'?我transclude: 'element'在angular文档中找不到任何有关它们的信息,这非常令人困惑。

如果有人可以用简单的语言解释这一点,我将很高兴。每种选择的好处是什么?它们之间的真正区别是什么?

这是我发现的:

transclude: true

编译函数内部,您可以借助transclude链接函数来操作DOM,也可以使用任何HTML标记上的ngTransclude指令将已嵌入的DOM插入模板中。

transclude: ‘element’

这将包含整个元素,并且在编译函数中引入了包含链接功能。您无法在此处访问范围,因为尚未创建范围。编译函数为该指令创建了一个链接函数,该链接函数可以访问范围,而transcludeFn可以让您触摸克隆的元素(已被嵌入)进行DOM操作或使用绑定到其中范围的数据。供您参考,这在ng-
repeat和ng-switch中使用。


问题答案:

从AngularJS关于指令的文档中:

transclude-编译元素的内容并使其可用于指令。通常与ngTransclude一起使用。包含的优点是链接功能接收一个预先绑定到正确作用域的包含功能。在典型的设置中,小部件创建隔离范围,但包含不是子项,而是隔离范围的同级。这使得小部件可以具有私有状态,并且可以将包含项绑定到父(预隔离)范围。

true -排除指令的内容。

'element' -包括所有以较低优先级定义的指令在内的整个元素。

超越:正确

因此,假设您有一个名为的my-transclude-true声明的指令,transclude: true它看起来像这样:

<div>
  <my-transclude-true>
    <span>{{ something }}</span>
    {{ otherThing }}
  </my-transclude-true>
</div>

编译之后和链接之前,它变为:

<div>
  <my-transclude-true>
    <!-- transcluded -->
  </my-transclude-true>
</div>

内容 (子级)为my-transclude-true,已<span>{{ something }}</span> {{...被排除并且可用于该指令。

包含:“元素”

如果您有一个名为my-transclude-element声明的指令,则该指令transclude: 'element'如下所示:

<div>
  <my-transclude-element>
    <span>{{ something }}</span>
    {{ otherThing }}
  </my-transclude-element>
</div>

编译之后和链接之前,它变为:

<div>
   <!-- transcluded -->
</div>

在这里, 包括其子元素在内整个元素 都被排除并提供给指令。

链接后会发生什么?

这取决于您的指令使用transclude函数执行所需的操作。ngRepeat使用,transclude: 'element'以便在范围更改时可以重复整个元素及其子元素。但是,如果您只需要替换标签并希望保留其内容,则可以transclude: truengTransclude为您执行此操作的指令一起使用。



 类似资料:
  • 问题内容: 我一直在阅读此选择器,并得到相互矛盾的答案。 在:/ deep /和::shadow在CSS选择器中是什么意思? 我们看: 正如Joel H.在评论中指出的那样,Chrome自此之后就弃用了/ deep /组合器,并在IE中给出了语法错误。 我们看: / deep /不再存在,所以我认为我们不应该支持它。>>>是新版本,可能应该支持 我们看: / deep /选择器还具有别名>>>。我

  • 有人在指令中被监视。 在这种情况下,只有在apply存在时才触发watch。

  • 问题内容: 我尝试将Angular与Bluebird Promise一起使用: HTML: JS: [ 小提琴 ] 但是,无论我尝试了什么,它都保持不变并且没有更新。除非我添加了手册,否则我会避免使用。 如何让Bluebird与AngularJS一起使用? (我知道这是可能的,因为$ q可以这样做) 我正在使用Bluebird2.0,我在这里。 问题答案: 这是可能的,甚至很容易! 好吧,如果我们

  • 问题内容: 我是pthread的新手,我正试图了解它。我看到了一些类似以下的示例。 我可以看到API阻止了它,并且我看到了一些示例,其中主要功能都被API阻止了。我不明白什么时候使用什么? 我指的是以下站点-https://computing.llnl.gov/tutorials/pthreads/。我无法获得何时使用和何时使用的概念。 有人可以解释一下吗?此外,将感谢一个很好的pthread教程

  • 问题内容: 我有一个利用SignalR与桌面应用程序通信的应用程序。要使用SignalR,我需要在.ts文件中使用jQuery。但是,从Angular 7迁移到Angular 8后,它似乎不起作用。 我像以前的Angular版本一样使用。不幸的是,$现在向控制台输出空白。 那么,Angular v8不再支持这种方式使用jQuery,还是在迁移过程中出现其他问题? 更新: 我有通过npm加载的jQu

  • 问题内容: 基础 角1.1.5- http ://plnkr.co/edit/eoKt8o4MJw9sWdYdeG3s? p= preview-作品 上调 角度1.2.6- http ://plnkr.co/edit/WopgAtFNVm1mKf5Li99h? p= preview-失败 我认为我确实遵循了文档中的说明-http: //docs.angularjs.org/api/ngAnimat