Angular: Empty Fiddle

http://angularjs.org/

HTML

<!-- template2.html -->
<script type="text/ng-template" id="template1.html">
    Hello
    <div my-directive></div>
</script>


<div ng-controller="MyCtrl">
    <button ng-click="vis = true">Show</button>
    <button ng-click="vis = false">Hide</button>
    <button ng-click="showHide()">Show-Hide</button>
    <div ng-if="vis">
        Include: 
        <div ng-include src="'template1.html'"></div>
    </div>
</div>

JavaScript

var myApp = angular.module('myApp',[]);

myApp.config(function($provide) {
  $provide.decorator('ngIncludeDirective', function($delegate, $timeout, $http,   $templateCache,   $anchorScroll,   $compile,   $animate,   $sce) {
    var directive = $delegate[0];
    var compile = directive.compile;
      directive.compile = function(element, attr) {
      var srcExp = attr.ngInclude || attr.src,
          onloadExp = attr.onload || '',
          autoScrollExp = attr.autoscroll;

      return function(scope, $element, $attr, ctrl, $transclude) {
        var changeCounter = 0,
            currentScope,
            currentElement;

        var cleanupLastIncludeContent = function() {
          if (currentScope) {
            currentScope.$destroy();
            currentScope = null;
          }
          if(currentElement) {
            $animate.leave(currentElement);
            currentElement = null;
          }
        };

        scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) {
          var afterAnimation = function() {};
          var thisChangeId = ++changeCounter;

          if (src) {
            $http.get(src, {cache: $templateCache}).success(function(response) {
              
              setTimeout(function() {
                    
              if (thisChangeId !== changeCounter) return;
              var newScope = scope.$new();

              $transclude(newScope, function(clone) {
                cleanupLastIncludeContent();

                currentScope = newScope;
                currentElement = clone;

                currentElement.html(response);
                $animate.enter(currentElement, null, $element, afterAnimation);
                $compile(currentElement.contents())(currentScope);
                currentScope.$emit('$includeContentLoaded');
                scope.$eval(onloadExp);
                  
              });
                  
              },1000);
            }).error(function() {
             ...