如何通过参数时我初始化一个工厂初始化在角

问题描述:

工厂的功能我不知道,我怎么能传递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工厂?

+1

工厂是单身,所以他们只初始化一次。你将params传递给工厂的用例是什么? –

+0

@SinaGh谢谢,用例可以像我的代码一样简单,就像赋予facObj名称属性 – Kuan

+0

@SinaGh是正确的,但。虽然JoshBeam下面的答案很好,但重要的是要明白它与你所要求的不一样。它实际上会修改工厂的内部状态。 – aw04

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

.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(); 
});