考虑下面的模块,如何在不依赖AngularJS依赖注入的情况下直接调用RESTService.get
?
angular.module('RESTModule', ['ngResource']).
factory('RESTService', ['$resource', function($resource) {
return $resource('http://jsonplaceholder.typicode.com/posts/1', {});
}
]);
我希望能够像下面那样创建一个库方法,直接调用工厂创建的对象,但factory()
不能按预期工作。
var MyLibrary = {};
MyLibrary.method = function() {
// ...
// The line below miserably fails... :-(
angular.module('RESTModule').factory('RESTService').get();
};
我可能做错了,应该考虑写一个AngularJS服务......但是当我被困在上面时,我决定寻求你的帮助。
谢谢!
旁注:我正在编写一个应用程序,允许开发人员在其上包含自己的表单(视图),以及他们自己的模块来控制这些视图(我在这里做得很好)。
但是我没有强制它们在自己的代码上注入模块(比如RESTModule
),而是让他们调用一个“静态”库方法(比如MYLibrary.method
)。
答案 0 :(得分:2)
angular.element(document.querySelector('*[ng-app]')).injector().get('RESTService');
应该完成这项工作,但你必须确保已加载角度并完成依赖注入,如下所示:
var restService;
var timer = setTimeout(function(){
if(angular &&
angular.element(document.querySelector('*[ng-app]')).injector())
{
clearTimeout(timer);
restService = angular.element(document.querySelector('*[ng-app]')).injector().get('RESTService');
}}, 1000);
答案 1 :(得分:0)
有一个事实。您的方法需要$ resource才能正常工作。 如果您通过Angular使用它,它将为您注入该依赖项,并且$ resource将不会被定义。
如果要直接调用该方法,请将该方法分配给var并使用您自己的$ resource对象调用它。
var factoryMethod=function($resource) {
return $resource('http://jsonplaceholder.typicode.com/posts/1', {});
};
angular.module('RESTModule', ['ngResource']).
factory('RESTService', ['$resource', factoryMethod]);
// factoryMethod(<your object>); will work
我没有真正了解有关动态用户指定表单的详细信息。但该方法可称为正常。