title: Why calling detectChanges() inside component doesn't update values, but wrapping code in setTimeout() does it?
body: <p>I'm trying to automatically select the first value from set of options in <code>&lt;mat-autocomplete ...&gt;</code></p>
  
  <pre><code>export class ExampleComponent implements OnInit, AfterViewInit {
  
  @ViewChildren('auto') matAutocomplete: QueryList&lt;any&gt;;
  
  constructor(private cdr: ChangeDetectorRef) { }
  
  ngAfterViewInit() {
      this.foundItemsList.changes.subscribe(options =&gt; {
          // ---&gt; This simply works!
          setTimeout(() =&gt; this.matAutocomplete.first._keyManager.setFirstItemActive(), 0);
  
          // ---&gt; This doesn't works?! No error shown, it just seems that the above function isn't called at all. 
          this.matAutocomplete.first._keyManager.setFirstItemActive()
          this.cdr.detectChanges();
      });
  }
  </code></pre>
  
  <p><a href="https://github.com/angular/material2/blob/master/src/lib/autocomplete/autocomplete.ts" rel="noreferrer">https://github.com/angular/material2/blob/master/src/lib/autocomplete/autocomplete.ts</a></p>
  
  <p>AFAIK, what <code>detectChanges</code> does is check the change detector of current component and all of its children components, correct? But it seems that it's not working in the scenario above.</p>