What is $implicit in angular 2?

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

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"