如何在浏览器中调试角度服务

mur*_*a52 37 angularjs

我在我的角度应用程序中创建了一个工厂/服务.

我想在浏览器中调试它.有没有办法可以访问它的实例并检查其功能和变量的值.

可以使用角度范围访问角度范围

angular.element(e).scope()
Run Code Online (Sandbox Code Playgroud)

是否有类似的方式访问工厂?

bml*_*ite 67

我相信你可以使用这样的东西:

angular.element(e).injector().get('serviceName')
Run Code Online (Sandbox Code Playgroud)

由于angularjs服务是单例,因此在任何angular.element上执行此操作将始终返回相同的服务实例/对象.

  • +1这很棒.使用它可以更轻松地进行调试.添加角度文档的链接将进一步提高实用性.ref:http://docs.angularjs.org/api/angular.element (4认同)
  • @IvanWang是的,它仍然有效.刚刚经过测试,它正在运行.您确定`e`变量是否已定义且可访问?(这可能是像[this]这样的问题(http://stackoverflow.com/questions/13326351/uncaught-referenceerror-e-is-not-defined)?) (2认同)
  • 在Chrome中,您可以在元素标签中选择一个元素,并使用$ 0引用它.所以你可以选择你的主控制器元素,使用`angular.element($ 0).injector().get('serviceName')` (2认同)

Mar*_*cok 8

将您的服务注入任何控制器然后 console.log(myService);

小提琴.


ber*_*ndg 6

就像@bmleite说的那样,你可以使用:

angular.element( {DOM element} ).injector().get('serviceName')
Run Code Online (Sandbox Code Playgroud)

您可以选择所需的DOM元素(使用Chrome开发者工具上的"元素"标签或Firefox/Firebug上的"HTML"标签),然后使用$ 0在"控制台"标签中指向它.

选择最简单的元素是你有ngApp指令的元素.最终的代码是:

var myService = angular.element($0).injector().get('serviceName');
Run Code Online (Sandbox Code Playgroud)

然后您可以访问他的所有变量和函数:

myService.getConfig('dev');
Run Code Online (Sandbox Code Playgroud)