在AngularJS

时间:2015-10-23 02:08:25

标签: javascript angularjs angularjs-service

考虑下面的模块,如何在不依赖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)。

2 个答案:

答案 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

我没有真正了解有关动态用户指定表单的详细信息。但该方法可称为正常。