Issue 1:
Hi,

I just tried the latest beta. It is confusing to me and others I've spoken with why template variable binding to ngControl would - as visually written in the template - be binding to ngForm instead? (The current beta is requiring this according to documentation.) I believe one of the design goals of Angular was to make it clear in the template what is happening. Currently, this is not clear. The required template syntax for control binding within a form does not match what is actually occurring according to the documentation.

If one wants to refer to an ngControl on the form using a template local variable, why should the binding look like the following confusing syntax where the #name template variable is tied to an ngForm directive instead as shown on your documentation page https://angular.io/docs/ts/latest/guide/forms.html?

CONFUSING in the current beta:

ngControl="name" #name="ngForm"

BETTER:

ngControl="name" #name="ngControl"

Wouldn't a better syntax be to bind the template variable for the control to the ngControl which is actually then intent and effect of this syntax even as your documentation describes?

It would be even better if ngControl="name" would auto-create the #name template variable so only one attribute rather than 2 would be required but perhaps there is an interest in being highly explicit so possibly having both could make sense for the purpose of explicitness and perhaps tool binding (but it would be very nice to just be able to indicate ngControl='name' and be done.)

Even so, if the #name should be tied to an ngControl, shouldn't the template reflect what is being done for clarity by using #name=ngControl rather than #name=ngForm?

If we have one form on the page and 3 controls inside it, shouldn't the form itself have the template variable set to 'ngForm' (#heroForm="ngForm") while the 3 controls should be set as shown on the template to 'ngControl' (ngControl="name" #name="ngControl" --- ngControl="addressLine1" #addressLine1="ngControl" --- ngControl="city" #city="ngControl")?

as shown in documentation...

Here we initialize a template local variable (name) with the value "ngForm" (#name="ngForm"). Angular recognizes that syntax and re-sets the name local template variable to the ngControl directive instance [instead????]. In other words, the name local template variable becomes a handle on the ngControl object for this input box.

I'm asking in this issue why when the documentation says that the syntax sets the instance to the ngControl directive, the syntax as written is actually showing #name="ngForm" which intuits that Angular2 is setting the template instance variable to the ngForm? To be consistent with what is actually happening, wouldn't the clearer syntax for an ngControl be #name="ngControl" ?

Here is the form syntax that the paragraph from the documentation is explaining when it says #name='ngForm' actually makes name point to the ngControl directive:

<form (ngSubmit)="onSubmit()" #heroForm="ngForm">

<!-- Why ngForm? Why not ngControl? -->
<input type="text" class="form-control" required
[(ngModel)]="model.name"
ngControl="name" #name="ngForm" >
<div [hidden]="name.valid" class="alert alert-danger">
Name is required
</div>

<!-- now what if we have more controls on the form?
Why ngForm? Why not ngControl? -->
<input type="text" class="form-control" required
[(ngModel)]="model.addressLine1"
ngControl="addressLine1" #addressLine1="ngForm" >
<div [hidden]="addressLine1.valid" class="alert alert-danger">
Address first line is required
</div>

<input type="text" class="form-control" required
[(ngModel)]="model.name"
ngControl="city" #city="ngForm" >
<div [hidden]="city.valid" class="alert alert-danger">
City is required
</div>

Issue 2:
Something I'd like to discuss first.

It turns out, that ngControl/NgControlName is exported as ngForm. This is quite unintuitive when instances of ngControlare referenced. Say I want to display an error message when a control is invalid. I'd need an instance of that control to check it's validity:

<input ngControl="name" #name="ngForm">
<p *ngIf="!name.valid">This field is invalid!</p>

While this works (and I'm unsure if that's the way to do this), I'd rather expect ngControl to be exported as ngControl:

<input ngControl="name" #name="ngControl">

Is that something we can change? Or is there any reasoning behind ngControl being exported as ngForm?

This would be a BREAKING change.