我如何从控制台testingAngularJS服务?
我有一个像这样的服务:
angular.module('app').factory('ExampleService', function(){ this.f1 = function(world){ return 'Hello '+world; } return this; })
我想从JavaScript控制台testing它并调用服务的函数f1()
。
我怎样才能做到这一点?
所以我发现,如果已经存在一个注入器,你不能简单地调用angular.injector(['app'])
。 因为这个函数试图创build一个新的注入器。
相反,你必须调用injector = angular.element(document.body).injector()
从检索到的injector
您可以使用injector.get('ServiceName')
获得任何您喜欢injector.get('ServiceName')
所以在一行中 ,命令将如下所示:
angular.element(document.body).injector().get('serviceName')
在这个答案更多的信息: 不能从angular度检索注射器
甚至更多: 在传统代码中调用Angular JS
另一个有用的技巧来获得特定元素的$scope
。 使用开发人员工具的DOM检查工具select元素,然后运行以下行( $0
始终是选定的元素):
angular.element($0).scope()
首先,您的服务的修改版本。
一个 )
var app = angular.module('app',[]); app.factory('ExampleService',function(){ return { f1 : function(world){ return 'Hello' + world; } }; });
这返回一个对象,这里没有新的东西。
现在从控制台得到这个的方式是
b)
var $inj = angular.injector(['app']); var serv = $inj.get('ExampleService'); serv.f1("World");
C )
你之前在那里做的一件事是假设app.factory返回你自己的函数或者它的一个新版本。 事实并非如此。 为了得到一个构造函数,你要么必须这样做
app.factory('ExampleService',function(){ return function(){ this.f1 = function(world){ return 'Hello' + world; } }; });
这将返回一个ExampleService构造函数,您将接下来必须执行“新build”。
或者,
app.service('ExampleService',function(){ this.f1 = function(world){ return 'Hello' + world; }; });
这将在注入时返回新的ExampleService()。
@ JustGoscha的答案是现货,但是当我想要访问的时候需要input很多东西,所以我把它添加到我的app.js的底部。 然后,我必须input的是x = getSrv('$http')
来获取http服务。
// @if DEBUG function getSrv(name, element) { element = element || '*[ng-app]'; return angular.element(element).injector().get(name); } // @endif
它将其添加到全局范围,但仅在debugging模式下。 我把它放在@if DEBUG
里面,这样我就不会在生产代码中find它了。 我使用这种方法从prouduction构build中删除debugging代码。