ChatGPT解决这个技术问题 Extra ChatGPT

什么是 ng-transclude?

我在 StackOverflow 上看到了许多讨论 ng-transclude 的问题,但没有一个用外行人的术语解释它是什么。

文档中的描述如下:

为使用嵌入的最近父指令的嵌入 DOM 标记插入点的指令。

这相当令人困惑。有人可以用简单的术语解释 ng-transclude 的用途以及可能在哪里使用吗?

它基本上是您为特定 html 标记或指令插入的任何内容的标记点。将它与指令一起使用,您会更好地理解它。

B
Ben Fischer

Transclude 是一种设置,用于告诉 Angular 捕获标记中指令内的所有内容,并在指令模板中的某处(实际上 ng-transclude 所在的位置) 使用它。在 documentation of directives 上的创建包装其他元素的指令部分阅读更多相关信息。

如果您编写自定义指令,则在指令模板中使用 ng-transclude 来标记要插入元素内容的点

angular.module('app', [])
  .directive('hero', function () {
    return {
      restrict: 'E',
      transclude: true,
      scope: { name:'@' },
      template: '<div>' +
                  '<div>{{name}}</div><br>' +
                  '<div ng-transclude></div>' +
                '</div>'
    };
  });

如果你把它放在你的标记中

<hero name="superman">Stuff inside the custom directive</hero>

它会显示为:

自定义指令中的超人东西

完整示例:

Index.html

<body ng-app="myApp">
  <div class="AAA">
   <hero name="superman">Stuff inside the custom directive</hero>
</div>
</body>

jscript.js

angular.module('myApp', []).directive('hero', function () {
    return {
      restrict: 'E',
      transclude: true,
      scope: { name:'@' },
      template: '<div>' +
                  '<div>{{name}}</div><br>' +
                  '<div ng-transclude></div>' +
                '</div>'
    };
  });

Output markup

https://i.stack.imgur.com/O0c2L.png

可视化:

https://i.stack.imgur.com/5Uc5r.png


这是比他们的官方文档更好的描述。那个让我头疼。
很好的答案! :) 您分享的链接帮助我了解 transclude 的过程。
Angular 应该使用这个解释而不是他们目前拥有的文档。
@codeofnode 其 Angular 的编译服务,这里是相关代码 github.com/angular/angular.js/blob/…
Stackoverflow 的答案是了解角度概念的最佳方式
g
gamliela

对于那些来自 React 世界的人来说,这就像 React 的 {props.children}


S
Sîrbu Nicolae-Cezar

这是一种产量,来自 element.html() 的所有内容都在那里呈现,但指令属性在特定范围内仍然可见。


我认为最佳答案是完美的,但如果您来自红宝石背景,那么我同意,yield 似乎是一个很好的类比。
@Apie 是的,我来自红宝石背景

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅