title: AngularJS directive : compile template and watch scope
body: <p>I writing a pretty complex application on Angularjs. This is already big enough to confuse me. I research Angular deeper and I see my code is bad. 
  I understand this concept:</p>
  
  <pre><code> module.directive('createControl', function($compile, $timeout){
       scope: {
               // scope bindings with '=' &amp; '@'
              },                                                                                                                  
       template: '&lt;div&gt;Template string with binded {{ variables }}&lt;/div&gt;',          
       link: function(scope, element, attrs){
              // Function with logic. Should watch scope.
              }
  </code></pre>
  
  <p>I have several problems:</p>
  
  <ul>
  <li>My template is complicated, I have part of template which going in the link function dynamically</li>
  <li>I need to append compiled template to the element, not to replace.</li>
  <li>With concept above my template are appended without any interpolation...</li>
  </ul>
  
  <p>So my code is looking like that in simplified view:</p>
  
  <pre><code>module.directive('createControl', function($compile, $timeout){
       scope: {
                var1: '@var1',
                var2: '@var2',
                var3: '@var3'
              },                                                                                                                  
       template: '&lt;div&gt;{{ var1 }} {{ var3 }}&lt;/div&gt;',          
       link: function(scope, element, attrs){
                $('.someelement').on('event', function(){
                  var2 = 'SNIPPET';  // Need to watch it
                }); 
                var3 = '&lt;span&gt;{{ var2 }}&lt;/span&gt;';
              }
       })
  </code></pre>
  
  <p>My questions is:</p>
  
  <p><strong>How to compile my template with scope variables?</strong></p>
  
  <p><strong>How to watch scope variables?</strong></p>
  
  <p><strong>Should I split my directive for two? If I should, how to do it in right way?</strong></p>