title: Angular markForCheck vs detectChanges
body: <p>I'll start this question from notion that <em>I've seen a similar question on StackOverflow</em>, but that question had only answer for <em>the difference</em>.</p>
  
  <p>What I'm asking is <strong>what should I use depending on situation</strong> and <strong>what drawbacks one or another method may have</strong>.</p>
  
  <p>I know that <code>detectChanges</code> runs immediate change detection cycle on an element and its children, meanwhile <code>markForCheck</code> only marks current element and its ancestors as dirty and that they should be checked on the next change detection cycle.</p>
  
  <p>I'm asking this mostly because I don't feel like I should always use <code>markForCheck</code> in async calls.</p>
  
  <p>For example I have an <code>InputComponent</code> which is a wrapper for a regular HTML input. This <code>InputComponent</code> has <code>ChangeDetectionStrategy.OnPush</code> enabled.</p>
  
  <p>When I make an asynchronous call to the server and get the data I need to run the change detection on that <code>InputComponent</code> to update a list of options and I have two options for that.</p>
  
  <p>First (what I feel I should be using) is <code>detectChanges</code> because it would apply checks only for this exact component, whilst <code>markForCheck</code> would cause the whole tree branch to be checked.</p>
  
  <p>So what should I use and do I need to use <code>markForCheck</code> ever and why?</p>