如何通过参数时我初始化一个工厂初始化在角
问题描述:
工厂的功能我不知道,我怎么能传递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.
})
如何传递PARAMS工厂?
答
你可以只公开一个方法来设置你想要的任何内部变量:
.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'
});
你不能用你通常会思考方式的一组参数进行初始化。所谓工厂的“合同”是指它返回一个对象。您可以利用该对象来保存操纵任何内部数据的方法。
+0
谢谢。现在我懂了。 – Kuan
答
因为工厂是单身人士,他们只发起一次。因此,你定义它们的函数是它们的init。我不知道你正在尝试做的,但如果你想给在工厂中的变量的初始值,将其设置硬编码
.factory("facObj", function(dependency){
var facObj = {};
facObj.name = "name";
return {
...
};
})
,如果你想从一个控制器启动它们,你可以定义了一组方法
.factory("facObj", function(dependency){
var facObj = {};
var setName = function(newName) {
facObj.name = newName;
};
return {
...
setName: setName
};
})
答
我用这样的事情的模式看起来像这样...
厂代码...
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();
});
工厂是单身,所以他们只初始化一次。你将params传递给工厂的用例是什么? –
@SinaGh谢谢,用例可以像我的代码一样简单,就像赋予facObj名称属性 – Kuan
@SinaGh是正确的,但。虽然JoshBeam下面的答案很好,但重要的是要明白它与你所要求的不一样。它实际上会修改工厂的内部状态。 – aw04