To achieve what you have to do, you can use angular events or you can share an object through isolate scope and add a function to it. 
Examples:
1- With Angularjs Events: (PLUNKER)
HTML:
<div click-to-edit></div>
<button type="button" ng-click="item.toggle()">Toggle from Controller</button>
Controller:
app.controller('MainCtrl', function($scope) {
    $scope.toggle = function(){
        //Emit the event
        $scope.$broadcast('app.myEvent');
    };
});
Directive:
app.directive('clickToEdit', function() {
    return {
        restrict: 'A',
        template: `
            <div ng-show="editState">
                <div>
                    <input type="text"/>
                    <button type="button" ng-click="item.toggle()">Cancel</button>
                </div>
            </div>
        `,
        link: function (scope, element, attrs) {
            scope.editState = false;
            scope.toggle = function () {
                scope.editState = !scope.editState;
            }
            //Listen and handler the event
            scope.$on('app.myEvent', function(event){
                scope.toggle();
            });
        }
    }
});
2- Share object through isolate scope: (PLUNKER)
HTML:
<div click-to-edit item="item"></div>
<button type="button" ng-click="item.toggle()">Toggle from Controller</button>
Controller:
app.controller('MainCtrl', function($scope) {
    $scope.item = {};
});
Directive:
app.directive('clickToEdit', function() {
    return {
        restrict: 'A',
        scope: {
            item: '='
        }
        template: `
            <div ng-show="editState">
                <div>
                    <input type="text"/>
                    <button type="button" ng-click="item.toggle()">Cancel</button>
                </div>
            </div>
        `,
        link: function (scope, element, attrs) {
            scope.editState = false;
            //Here you add the function to the isolate scope 'item' variable
            scope.item.toggle = function () {
                scope.editState = !scope.editState;
            }
        }
    }
});