直接调用 AngularJS 工厂实例化的对象
Direct call to objects instantiated by factory on AngularJS
考虑到下面的模块,如何在不依赖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
)。
有一个事实。您的方法需要 $resource 才能正常工作。
如果您使用 via 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
我并没有真正了解有关动态用户给定表单的详细信息。但是方法可以正常调用
angular.element(document.querySelector('*[ng-app]')).injector().get('RESTService');
应该可以完成这项工作,但您必须确保 angular 已加载并完成依赖注入,如下所示:
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);
考虑到下面的模块,如何在不依赖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
)。
有一个事实。您的方法需要 $resource 才能正常工作。 如果您使用 via 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
我并没有真正了解有关动态用户给定表单的详细信息。但是方法可以正常调用
angular.element(document.querySelector('*[ng-app]')).injector().get('RESTService');
应该可以完成这项工作,但您必须确保 angular 已加载并完成依赖注入,如下所示:
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);