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