title: Proper way to pass functions to directive for execution in link
body: <p>I know we usually pass functions to directives via an isolated scope:</p>
  
  <pre class="lang-js prettyprint-override"><code>.directive('myComponent', function () {
      return {
          scope:{
              foo: '&amp;'
          }        
      };
  })
  </code></pre>
  
  <p>And then in the template we can call this function like such:</p>
  
  <pre class="lang-html prettyprint-override"><code>&lt;button class="btn" ng-click="foo({ myVal: value })"&gt;Submit&lt;/button&gt;
  </code></pre>
  
  <p>Where <code>myVal</code> is the name of the parameter that function <code>foo</code> in the parent scope takes.</p>
  
  <p>Now if I intend to use this from the <code>link</code> function instead of template, I will have to call it with: <code>scope.foo()(value)</code>, since <code>scope.foo</code> serves as a wrapper of the original function. This seems a bit tedious to me. </p>
  
  <p>If I pass the function to the <code>myComponent</code> directive using <code>=</code>:</p>
  
  <pre class="lang-js prettyprint-override"><code>.directive('myComponent', function () {
      return {
          scope:{
              foo: '='
          }        
      };
  })
  </code></pre>
  
  <p>Then I will be able to just use <code>scope.foo(value)</code> from my link function. So is this a valid use case to use 2-way binding on functions, or am I doing some sort of hack that I shouldn't be doing?</p>