You can define a controller with a global name, and then specify it in the directive:
//LoginSidebarController.js class LoginSidebarController { // controller code here } export default LoginSidebarController //LoginSidebarDirective.js export default function() { return { scope: {}, templateUrl: 'tpl/path/to/loginSidebar.tpl.html', replace: true, controller: 'LoginSidebarController', controllerAs: 'loginSidebarCtrl' }; }; //app.js import loginSidebarDirective from "./js/component/loginSidebar/LoginSidebarDirective.js"; import LoginSidebarController from "./js/component/loginSidebar/LoginSidebarController.js"; angular.module('myModule', []) .directive('loginSidebar', loginSidebarDirective) .controller('LoginSidebarController', LoginSidebarController)
Then you can require the controller, like another ordinary controller, to check it regardless of the directive.
As a second way, you can access the controller using the angular.element().controller('loginSidebar') . Something like that:
var testElm = angular.element('<login-sidebar />'); $compile(testElm); testElm.controller('loginSidebar')
source share