I have created a directive.
angular.module('app')
  .directive('navtree', function (service) {
    return {
      restrict: 'A',
      scope: {},
      link: function (scope, el) {
        scope.loadNavtree = function(){
          service.data()
              .then(function (data) {
                 ///Do something
              });
        }
        scope.loadNavtree();
      }
    };
  });
from my controller I can access the method using
$scope.$parent.$$childHead.loadNavtree();
Though this is working, I feel that this is not the right approach. I want to understand what are the disadvantages of accessing function defined in directive from your controller like this.
I looked this link but I was not able to follow
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
   /// How to call takeTablet() available in directive from here?
});
    app.directive('focusin', function factory() {
      return {
        restrict: 'E',
        replace: true,
        template: '<div>A:{{internalControl}}</div>',
        scope: {
          control: '='
        },
        link      : function (scope, element, attrs) {
          scope.takeTablet = function() {
            alert('from directive');// 
          }
        }
      };
    });
 
     
    