如何在Angular中将参数传递给工厂的初始化函数

时间:2015-12-31 19:30:05

标签: angularjs

我想知道当我开办工厂时,我怎样才能将params传递给它,例如:

.factory("facObj", function(/*dependency here, but how to put init params*/){
    var facObj = {};
    facObj.name = params.name; // this params is the init params I want to pass in.
})

如何将这些参数传递给工厂?

3 个答案:

答案 0 :(得分:3)

您可以公开一个方法来设置您想要的任何内部变量:

.factory('facObj', function() {
  var thing;

  return {
    set: function(value) {
      thing = value;
    },
    get: function() {
      return thing;
    }
  }
});


// elsewhere
.controller('MyCtrl', function($scope, facObj) {
   facObj.set('awesome');

   $scope.thing = facObj.get(); // => 'awesome'
});

您无法以通常认为的方式使用一组参数对其进行初始化。可以说工厂的“合同”是它返回一个对象。您可以利用该对象来保存操纵您拥有的任何内部数据的方法。

答案 1 :(得分:2)

因为工厂是单身人士,所以他们只启动一次。因此,您定义它们的函数是它们的init。我不确定你要做什么,但是如果你想在工厂给变量一个初始值,你就把它设置为硬编码

.factory("facObj", function(dependency){
    var facObj = {};
    facObj.name = "name";
    return {
      ...
    };
})

如果要从控制器启动它们,可以定义set方法

.factory("facObj", function(dependency){
    var facObj = {};
    var setName = function(newName) {
      facObj.name = newName;
    };
    return {
      ...
      setName:  setName
    };
})

答案 2 :(得分:0)

我用于这种事情的模式看起来像这样......

工厂代码......

angular.module('myApp').factory('MyFactory', function () {

  var myVar;

  function MyFactory(param) {
    myVar = param;
    this.hello = hello;
  }

  function hello() {
    console.log('Hello ' + myVar);
  }

  return MyFactory;
});

然后在使用工厂并需要传递参数时......

angular.module(‘myApp’).controller(‘MyController’ function(MyFactory) {
   myFactory = new MyFactory(‘world’);
   myFactory.hello();
});