2013-08-16 21 views
0

我剛開始在Angular JS中開發一個非常簡單的應用程序,其中包含一個服務/工廠,用於存儲我可以將對象推送到的數據。Angular JS:將一個數組中的對象存儲到不同的數組/服務中

我有一組不同的人(見html),你可以添加作爲候選人使用addCandidate()函數位於工廠。

我的問題是,我希望能夠將來自該數組的人員/對象存儲到多個數組中,例如, 候選人2和候選人3取決於哪個路由/控制器處於活動狀態。

我在正確的軌道上還是應該認爲完全不同?

廠和控制器:

var app = angular.module('myApp', []); 

app.factory('Candidates', function(){ 

    var candidates = []; 

    /* I want to fill this array with objects from myCtrl2 */ 
    var candidates2 = []; 

    return{ 

    addCandidate: function(candidate){ 
     candidates.push(candidate); 
    } 

    /* More functions related to Candidates */ 

    } 
}); 

app.controller('myCtrl1', function($scope, Candidates){ 

    $scope.addCandidate = function(candidate){ 
    Candidates.addCandidate(candidate); 
    } 

}); 

/* I want to push candidates to candidates2 here */ 

app.controller('myCtrl2', function($scope, Candidates){ 

    $scope.addCandidate = function(candidate2){ 
    Candidates.addCandidate(candidate2); 
    } 

}); 

/* More controllers of same kind */ 

HTML:

<ul> 
    <li ng-repeat="person in people"> 
     <h2>{{ person.name }}</h2> 
     <button ng-click="addCandidate(person)">Add candidate</button> 
    </li> 
</ul> 

回答

1

它看起來像你想應聘爲每個控制器不同。在這種情況下,使工廠構建一個對象構造函數(類似於類,但不是真的),而不是每次都提供相同的對象。

查看此plunker爲例。請注意,每個控制器請求並通知它是自己的候選人,而不是使用共享的候選人定義。

+0

這真的有所幫助,它只是我希望數組中的數據在不同路由中可用(即使您返回到路由1)。如果我從另一條路線返回到路線1和控制器1,工廠將用一個空數組構建一個新的候選對象,並打印出來而不是添加的候選對象。 – Rocaboca

+0

所以如果我明白了,這些數組會有很多實例,每個實例都需要保留?我將創建一個處理候選人管理的服務,另一個基於名稱或其他創建並保留這些候選對象。然後每個控制器請求後者服務,並通過名稱請求它需要的候選對象。 – heneryville

相關問題