我想知道当我开办工厂时,我怎样才能将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.
})
如何将这些参数传递给工厂?
答案 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();
});