ChatGPT解决这个技术问题 Extra ChatGPT

What is ng-transclude?

I have seen a number of questions on StackOverflow discussing ng-transclude, but none explaining in layman's terms what it is.

The description in the documentation is as follows:

Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.

This is fairly confusing. Would someone be able to explain in simple terms what ng-transclude is intended to do and where it might be used?

it's basically a marking point for whatever you are inserting for the particular html tag or directive. use it with a directive and you will understand it better.

B
Ben Fischer

Transclude is a setting to tell angular to capture everything that is put inside the directive in the markup and use it somewhere(Where actually the ng-transclude is at) in the directive's template. Read more about this under Creating a Directive that Wraps Other Elements section on documentation of directives.

If you write a custom directive you use ng-transclude in the directive template to mark the point where you want to insert the contents of the element

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

If you put this in your markup

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

It would show up like:

Superman Stuff inside the custom directive

Full example :

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

Visualize :

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


This is much better description, than their official docs. That one makes my head hurt.
Great answer! :) The link you shared help me to understand the process of transclude.
Angular should use this explanation instead of the docs they currently have.
@codeofnode its angular's compile service, here's the relevant code github.com/angular/angular.js/blob/…
Stackoverflow answers are best way to undersatnd angular concepts
g
gamliela

For those who come from React world, this is like React's {props.children}.


S
Sîrbu Nicolae-Cezar

it's a kind of yield, everything from the element.html() gets rendered there but the directive attributes still visible in the certain scope.


The top answer I reckon is perfect, but if you are coming from a ruby background then I agree, yield seems like a good analogy.
@Apie yea, i come from a ruby background