javascript - 将工厂注入(inject)另一个 Angular 工厂

标签 javascript angularjs

为了在工厂调用中设置我的网址的基础,我需要调用另一个工厂的方法来获取配置。下面不断抛出 Provider 'reportService' must return a value from $get factory method. 错误:

.factory('reportService', ['$resource', 'serverService',
  function($resource, serverService) {

    serverService.getConfiguration().$promise.then(function(config) {
      var base = config.reporting.url;
      return $resource(base, {}, {
        getReportResults: {method: 'POST', url: base + '/api/reports/:id/versions/:version'}
      });
    });
  }])

服务器服务:

angular.module('app')
  .factory('serverService', ['$resource',
    function($resource) {
      var base = '/api/server/';
      return $resource(base, {}, {
        getConfiguration: {method: 'GET', url: base + 'configuration'}
      });
    }]);

最佳答案

如果它是一个工厂方法,它应该返回一个对象的实例。仅当您需要/注入(inject)它到另一个组件时才会调用它。

在这种情况下,您的返回位于内部函数内部,因此该函数不会返回任何项目。

应该是这样的:

.factory('reportService', ['$resource', 'serverService',
  function($resource, serverService) {
    var base = config.reporting.url;
    function ReportService() {
      serverService.getConfiguration().$promise.then(function(config) {
        this.resource = $resource(base, {}, {
          getReportResults: {method: 'POST', url: base + '/api/reports/:id/versions/:version'}
        });
      }.bind(this));
    }
    return new ReportService()
  }])

更多说明:

  1. 工厂应该返回一个对象。

例如:

.factory('message', function () {
  return "Hello World!"
}

因此,当它被注入(inject)到另一个组件时,它将具有返回对象的值。

.controller('something', ['$scope', 'message', function ($scope, message) {}]);

那么消息的值为“Hello World!”

  • 内部函数的返回不计算在内。
  • 例如:

    .factory('message', function () {
      http.get(...).then(function (data) {
        return "Hello World!"
      });
    }
    

    关于javascript - 将工厂注入(inject)另一个 Angular 工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38374849/

    相关文章:

    javascript - 是否可以延迟客户端的 UpdatePanel 更新?

    javascript - 生成csv文件时转义特殊字符

    javascript - 将 SVG 作为字符串插入有效,但不能作为元素插入

    javascript - 即使过滤器参数未更改,也会调用 Angular 过滤器

    angularjs - 为什么 {{ isNan(x) }} 在 angularJS 中不起作用?

    javascript - 根据角色 Angular 不同的模板 url

    javascript - 有没有办法循环这个?

    javascript - 在 angularjs 中使用服务

    javascript - 更新 ng-if 变量后,Angular 显示空屏

    javascript - AngularJS——如何在 Jasmine 中为输入事件指令编写单元测试