Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is $implicit in angular 2?

How is the following keyword used in angular2 ng-templates

  • What is the purpose of $implicit in angular 2 templates?
  • What is relationship between let-<attribute> and $implicit?
like image 692
Mantu Nigam Avatar asked Jul 12 '17 10:07

Mantu Nigam


People also ask

What is $implicit in Angular?

You can define local variables on ng-template through let-name. When angular creates a template by calling createEmbeddedView it can also pass context that will be used inside ng-template. Using the key $implicit in the context object will set its value as default.

What is the use of ngTemplateOutlet?

ngTemplateOutlet is a powerful tool for creating customisable components. It is used by many Angular libraries to enable users to provide custom templates.

What is * ngTemplateOutlet?

ngTemplateOutlet is a directive. It instantiates a template dynamically using a template reference and context object as parameters. In this guide, we will learn how to use it in Angular. We will show you several ngTemplateOutlet examples to learn from.

What is Templateref in Angular?

TemplateReflinkRepresents an embedded template that can be used to instantiate embedded views. To instantiate embedded views based on a template, use the ViewContainerRef method createEmbeddedView() .


3 Answers

You can define local variables on ng-template through let-name

When angular creates a template by calling createEmbeddedView it can also pass context that will be used inside ng-template

Using the key $implicit in the context object will set its value as default. So if we write:

vcRef.createEmbeddedView(template, { $implicit: 'value' })

and we have the template

<ng-template let-foo> 
 {{ foo }}
</ng-template>

then we can think about it like

<ng-template let-foo="$implicit"> 
  {{ foo }}
</ng-template>

so foo will equal value

Plunker Example

On the other hand, if we have a context like:

{ bar: 'value' }

we have to declare variables like:

let-foo="bar"
like image 152
yurzui Avatar answered Oct 21 '22 00:10

yurzui


For multiple variables, you should do something like below, A template would be:

<ng-template [ngTemplateOutlet]="template" [ngTemplateOutletContext]="{$implicit: 'Hello', key2: 'value2', key3: 'value3'}"> </ng-template>

then

<ng-template #template let-default let-key2="key2" let-key3="key3">
{{default}}
{{key2}}
{{key3}}
</ng-template>

so, output will be,

default = Hello
key2 = value2
key3 = value3
like image 15
Vikash Kumar Choudhary Avatar answered Oct 21 '22 00:10

Vikash Kumar Choudhary


If you have to pass only a variable to the template from the container where we are referencing it, we could use

<ng-container *ngTemplateOutlet="deleteClient;context: firstName">
</ng-container>

And use it like this.

<ng-template #deleteClient let-client="firstName">
Are you sure? Want to remove {{ client }} !
</ng-template>

Where as If you have to pass the object it self to the template, we could use

<ng-container *ngTemplateOutlet="deleteClient;context: { $implicit: client }"> 
</ng-container>

And use it like this.

<ng-template #deleteClient let-client>
Are you sure? Want to remove {{ client.firstName }} {{ client.lastName }}!
</ng-template>
like image 4
alreddy annela Avatar answered Oct 21 '22 01:10

alreddy annela