"Content projection (also known as transclusion) is a way to import HTML content from outside the component and insert that content into the component's template in a designated spot."
"The Angular ng-container is a grouping element (syntax element) that doesn't interfere with styles or layout because Angular doesn't put it in the DOM."
And we can use structural directives with it.
"A Structural directive changes the DOM layout by adding, removing or manipulating DOM elements."
Here ng-template comes to the rescue...
As the name suggests, it is a template element, a model which you can instantiate, hence you can set a template as a component's input, which is pretty useful.
"The asterisk is syntactic sugar for something a bit more complicated."
You usually see with: *ngIf, *ngFor, *anyDirective,...
The ngTemplateOutlet directive receives a ng-template and it's responsible for create the instance and insert it into the DOM.