Get Current Controller In Use In Angularjs
Solution 1:
I see several way to log infos from/of the controller.
1) using element.controller()
From the docs of element.controller()
:
controller(name)
- retrieves the controller of the current element or its parent. By default retrieves controller associated with the ngController directive. Ifname
is provided as camelCase directive name, then the controller for this directive will be retrieved (e.g.'ngModel'
).
You can this function on very element to get its parent controller. Here is an snippet example using a directive:
var app = angular.module('app', [])
app.controller('MainController', functionMainController() {});
app.controller('directiveCtrl', functiondirectiveCtrl() {});
app.directive('controllerName', function($timeout) {
return {
restrict: 'A',
template: '<div>My controller name is: {{cName}}</div>',
controller: 'directiveCtrl',
link: function($scope, elem, attrs) {
var name;
name = elem.controller().constructor.name;
$scope.cName = name;
}
};
});
<scriptsrc="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script><divng-app="app"><divng-controller="MainController"><divcontroller-name></div></div>
***************************************************
<divng-controller="MainController"><divng-controller="directiveCtrl"><divcontroller-name></div></div></div><hr/></div>
2) using the console
You can access to every Angular object from your web console. For example, typing angular.element($0).scope()
will get the current scope.
See this answer, which is very complete about the use of the console.
3) logging from the controller
You can add a console call in your controller at the beginning of the code, and log whatever you want. This way, you will know each time a controller is instanciated:
app.controller('MyCtrl', function($scope) {
$scope.greetings = 'Hello world';
console.log('MyCtrl instanciated!', $scope.greetings);
});
Solution 2:
Here is an interesting and funny way of logging instantiated controllers
angular.module('yourModule')
.decorator('$controller', ['$delegate', functioncontrollerDecorator($delegate) {
returnfunctionloggingController (expression, locals, later, ident) {
// Do all your logging hereif (typeof (expression) === 'function') {
console.log('Controller:' + expression.name);
} elseif (locals.$$controller) {
console.log('Controller: ' + locals.$$controller);
} elseif (expression instanceofArray) {
console.log('Controller:' + expression[expression.length - 1].name);
} else {
console.log('Controller:' + expression);
}
// fire regular controller functionreturn $delegate(expression, locals, later, ident);
};
}]);
What you are doing here is pretty much extending angulars controller function so you get certain functionality on all controllers, not only yours
Solution 3:
Another way is injecting the $route
service and calling:
$route.current.controller
Post a Comment for "Get Current Controller In Use In Angularjs"