是否可以将routeProvider中的数据传递给工厂/服务?

时间:2016-12-13 21:36:42

标签: angularjs

在我的路由提供程序中,我有一个从JSON文件返回一些数据的resolve对象。我可以毫无问题地将它传递给我的控制器,但是当我尝试将它传递给我的工厂或服务时出现错误(未知提供商)。这有解决方法吗?

路线提供者:

function Students(name, lastname, grades){
    this.name = name;
    this.lastname = lastname;
    this.grades = grades;
    this.addGrade = function(a){
        this.grades.push(a);
    }
    this.printData = function(){
        console.log("Name: " + this.name);
        console.log("Grades: " + this.grades);
        console.log("Average: " + this.gradeAvg());
        //                                     ^^
    }
    this.gradeAvg = function(){
        return this.grades.reduce(function (a, b) { return a + b; }) / this.grades.length;
    }
}

var StudentasA = new Students("Petras", "Petrauskas", [8, 9, 9, 8, 7]);
var StudentasB = new Students("Jurgis", "Jurgauskas", [6, 7, 5, 4, 9]);
StudentasA.printData();
StudentasA.addGrade(28);
StudentasA.printData();

工厂:

.config(['$routeProvider', function($routeProvider) {
  (...)
      resolve: {
          'someData': function($http) {
              (...)
              return response.data;
          }
      }
  });
}])

控制器:

.factory('generateAvatarsFactory', ['someData', function(someData) {
(...)
// throws an unknown provider error

1 个答案:

答案 0 :(得分:1)

您应该通过这样的方法在服务中设置它,而不是将其传递给服务输入,因为服务是单例:

.factory('generateAvatarsFactory', ['someData', function(someData) {
    this.data = {};

    this.setValue = function(value) {
       this.data = value;
    }
}]);

然后在你的routeProvider中:

resolve: {
  'someData': function($http) {
      (...)
      generateAvatarsFactory.setValue(response.data);
      return response.data;
  }
}