After playing around with macro photography on-the-cheap (read: reversed lens, rev. lens mounted on a straight lens, passive extension tubes), I would like to get further with this. The problems with the techniques I used is that focus is manual and aperture control is problematic at best. This limited my setup to still subjects (read: dead insects) Now, as spring is approaching, I want to be able to shoot live insects. I believe that for this, autofocus and settable aperture will be of great help.

So, one obvious but expensive option is a macro lens (say, EF 100mm Macro) However, I am not really interested in yet another prime lens. An alternative is the electrical extension tubes.

Except for maximum focusing distance, what am I losing when using tubes (coupled with a fine lens, say EF70-200/2.8) instead of a macro lens?


Question: Is this a bug? Angular removes object params when corresponding input is not valid
Answer: It is not a bug, this is by design. The input type email uses regex to validate email address inputs. If the input is not valid it is removed from the model. 

On another note - if you wrap your stuff in a form - you can determine the validation state of the inputs. Also, as you are using a repeat, you will need an index. 

Here is an example of what I mean:

&lt;form name="myForm"&gt;
    &lt;div ng-repeat="contact in contacts"&gt;
      &lt;div ng-repeat="email in contact.emails track by $index"&gt;
        &lt;div ng-show="myForm.email{{$index}}.$invalid"&gt;Invalid email.&lt;/div&gt;
        &lt;input type="email" name="email{{$index}}" ng-model="email.email"&gt;
        &lt;input type="text" name="text" ng-model="email.text"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/form&gt;


I have updated your Plunker here.

These are the validation states you can use:

//[formName].[inputFieldName].property 
myForm.email1.$pristine;
// Boolean. True if the user has not yet modified the form.
myForm.email1.$dirty
// Boolean. True if the user has already modified the form.
myForm.email1.$valid
// Boolean.True if the the form passes the validation.
myForm.email1.$invalid
// Boolean. True if the the form doesn't pass the validation.
myForm.email1.$error