2015-12-31 130 views
0

工廠的功能我不知道,我怎麼能傳遞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

回答

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' 
}); 

你不能用你通常會思考方式的一組參數進行初始化。所謂工廠的「合同」是指它返回一個對象。您可以利用該對象來保存操縱任何內部數據的方法。

+0

謝謝。現在我懂了。 – Kuan

2

因爲工廠是單身人士,他們只發起一次。因此,你定義它們的函數是它們的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 
    }; 
}) 
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(); 
});