 <p><code>$apply</code> is necessary to tell angular that changes happened to the scope. Built-in directives and services like <code>ngClick</code> or <code>$http</code> do that internally. If you apply (sic!) changes to the scope and don't use the aforementioned built-in services, then you are responsible for calling <code>$apply</code> yourself.</p> <p>So if <code>show</code> isn't called within an <code>ngClick</code>handler, e.g., then you need to call <code>$apply</code> yourself.</p>