Javascript 获取angularjs中正在使用的当前控制器

Javascript 获取angularjs中正在使用的当前控制器,javascript,angularjs,logging,ngroute,Javascript,Angularjs,Logging,Ngroute,我想记录Angularjs应用程序中不同功能的使用情况。 当前正在使用的功能通常由浏览器中的当前路由/url标识,但有些功能在模式/弹出窗口中打开,或使用ngInclude打开,而路由/url没有更改 是否有任何中心方法来识别当前正在使用的功能,我曾想过使用当前的顶级控制器,但不幸的是不知道如何获得它 还有其他的想法吗 另外,我正在使用ngRoute。我发现有几种方法可以记录来自/来自控制器的信息 1) 使用element.controller() 从以下文件: 控制器(名称)-检索当前元素或其

我想记录Angularjs应用程序中不同功能的使用情况。 当前正在使用的功能通常由浏览器中的当前路由/url标识,但有些功能在模式/弹出窗口中打开,或使用ngInclude打开,而路由/url没有更改

是否有任何中心方法来识别当前正在使用的功能,我曾想过使用当前的顶级控制器,但不幸的是不知道如何获得它

还有其他的想法吗


另外,我正在使用ngRoute。

我发现有几种方法可以记录来自/来自控制器的信息

1) 使用
element.controller()
从以下文件:

控制器(名称)
-检索当前元素或其父元素的控制器。默认情况下,检索与关联的控制器 ngController指令。如果提供了
名称
指令名称,则此指令的控制器将为 已检索(例如,
'ngModel'

您可以在每个元素上使用此函数来获取其父控制器。以下是使用指令的代码段示例:

var-app=angular.module('app',[])
app.controller('MainController',函数MainController(){});
app.controller('directiveCtrl',function directiveCtrl(){});
应用程序指令('controllerName',函数($timeout){
返回{
限制:“A”,
模板:“我的控制器名称为:{{cName}}”,
控制器:“directiveCtrl”,
链接:函数($scope、elem、attrs){
变量名;
name=elem.controller().constructor.name;
$scope.cName=名称;
}
};
});

***************************************************


另一种方法是注入
$route
服务并呼叫:

$route.current.controller

下面是一种有趣的方法来记录实例化的控制器

angular.module('yourModule')
.decorator('$controller', ['$delegate', function controllerDecorator($delegate) {
    return function loggingController (expression, locals, later, ident) {

        // Do all your logging here
        if (typeof (expression) === 'function') {
            console.log('Controller:' + expression.name);

        } else if (locals.$$controller) {
            console.log('Controller: ' + locals.$$controller);

        } else if (expression instanceof Array) {
            console.log('Controller:' + expression[expression.length - 1].name);

        } else {
            console.log('Controller:' + expression);
        }

        // fire regular controller function
        return $delegate(expression, locals, later, ident);
    };
}]);

您在这里所做的几乎是扩展angulars控制器的功能,这样您就可以在所有控制器上获得某些功能,而不仅仅是您的

这种方法不会告诉我我的功能是在弹出窗口中打开的还是使用ngInclude打开的..谢谢,我如何将其作为工厂内的可注入资源来获取当前控制器名称?您只需将这段代码放在应用程序的某个地方,而不是将其注入某个地方。。。但请记住调整模块名称如果您成功地将其投入使用,请将我的答案标记为正确答案,谢谢!你能检查一下你的问题是否解决了吗?:)@Mistalis很抱歉没有。我正在寻找一个应用程序范围的解决方案,而您的解决方案并没有涵盖所有方面:(