Its a simple directive:
app.directive('ngFoo', function($parse){
  var controller = ['$scope', function ngNestCtrl($scope) {
    $scope.getCanShow = function() {
      console.log('show');
      return true;
    };
  }];
  var fnPostLink = function(scope, element, attrs) {
    console.log('postlink');
  };
  var fnPreLink = function(scope, element, attrs) {
    console.log('prelink');
  };
  var api = {
    template: '<div ng-if="getCanShow()">foo</div>',
    link: {
      post: fnPostLink,
      pre: fnPreLink
    },
    restrict: 'E',
    controller:controller
  };
  return api;
});
My goal was to find when "show" gets output to console. At this moment I figure it happens after linking (pre & post).
This makes sense. Since the template is rendered after those phases. (Correct me if I am wrong).
But then again, why would the template be rendered twice?
 
    