Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
  <meta charset="utf-8">
  <title>Angular... why?</title>
</head>
<body ng-app="app" ng-controller="appCtrl as vm">
  
  <button
    ng-click="vm.toggleGreet()"
    ng-bind="vm.greet ? 'Greeting' : 'Dismissal'"></button>
  
  <table transclude-table>
    <thead>
      <tr>
        <td ng-if="vm.greet">Hello</td>
        <td ng-if="!vm.greet">Goodbye</td>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td ng-bind="vm.greet ? 'Hallo!' : 'Tschüss!'"></td>
      </tr>
    </tbody>
  </table>
  
  <script type="text/ng-template" id="transclude-table-directive.html">
    <div class="wrapper">
      <div class="table-head-wrapper">
        <table class="table-head">
        </table>
      </div>
      <div class="table-body-wrapper">
        <table class="table-body">
        </table>
      </div>
    </div>
  </script>
  
  
</body>
</html>
 
angular.module('app', [])
  .controller('appCtrl', appCtrl)
  .directive('transcludeTable', transcludeTableDirective);
function appCtrl() {
  var vm = this;
  
  vm.greet = true;
  vm.toggleGreet = toggleGreet;
  
  function toggleGreet() {
    vm.greet = !vm.greet;
  }
}
transcludeTableDirective.$inject = ['$compile'];
function transcludeTableDirective($compile) {
  var directive = {
    restrict: 'A',
    transclude: 'element',
    replace: true,
    templateUrl: 'transclude-table-directive.html',
    link: link
  };
    
  return directive;
  
  function link(scope, element, attrs, controller, transcludeFn) {
    var theadEl,
        tbodyEl,
        theadWrapperEl,
        tbodyWrapperEl;
    
    transcludeFn(scope.$new(), function(clone, scope) {
      var theadEl = clone.find('thead').clone();
      var tbodyEl = clone.find('tbody').clone();
      theadParentEl = angular.element(element[0].getElementsByClassName('table-head')[0]);
      tbodyParentEl = angular.element(element[0].getElementsByClassName('table-body')[0]);
      theadParentEl.append($compile(theadEl)(scope));
      tbodyParentEl.append($compile(tbodyEl)(scope));
    });
  }
}
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers