2015-11-15 39 views
0

我在Angular中構建了一個日期時間選擇器,並且很難弄清楚如何使用ng-model的對象。我有一個name值爲1-12小時的散列,每個值有一個AMPM值。我沒有任何困難讓ng-options生成一個選項選擇與正確的名稱/值,但我很難弄清楚如何讓ng模型從列表中選擇正確的一個基於我設置的初始值我的newPost模型。使用帶ngModel選項的對象選擇

我已經在我看來,下面的標記:

<div> 
    <select name="hour" ng-options="hour.value as hour.name for hour in hours" ng-model="newPost.hour"></select> 
</div> 

然後在我的控制器,我建我的currentHour對象,像這樣:

var currentHourName = ((new Date()).getHours() + 24) % 12 || 12; 
var currentHour = { 
    name: currentHourName, 
    value: { 
     'AM': (((new Date()).getHours() + 24) % 12), 
     'PM': (((new Date()).getHours() + 24) % 12) + 12 
    } 
}; 

// Ancillary attributes omitted for brevity. 
$scope.newPost = { 
    hour: currentHour 
}; 


$scope.hours = [ 
    {name: 1, value: {'AM': 0,'PM': 12}}, 
    {name: 2, value: {'AM': 1,'PM': 13}}, 
    {name: 3, value: {'AM': 2,'PM': 14}}, 
    {name: 4, value: {'AM': 3,'PM': 15}}, 
    {name: 5, value: {'AM': 4,'PM': 16}}, 
    {name: 6, value: {'AM': 5,'PM': 17}}, 
    {name: 7, value: {'AM': 6,'PM': 18}}, 
    {name: 8, value: {'AM': 7,'PM': 19}}, 
    {name: 9, value: {'AM': 8,'PM': 20}}, 
    {name: 10, value: {'AM': 9,'PM': 21}}, 
    {name: 11, value: {'AM': 10,'PM': 22}}, 
    {name: 12, value: {'AM': 11,'PM': 23}} 
]; 

我想知道的是,我怎麼能使用ng-model進行此項工作。

回答

0

您可以使用ng-options中的track by。除了這個角度不知道如何比較您的ng-model和選項之間的平等。但是,如果您提供track by字段名稱,它將使用此字段來檢查相等性。

這裏是一個工作示例的plunker:Plunker Link

+0

我接受你的答案,因爲它適用於我在理論上如此。實際上,我無法按照自己的想法開始工作。我昨天晚上做了一件破解工作。我的方法唯一的缺點是,如果用戶改變了meridiem,那麼小時會改變。我改變了表達式爲'ng-options ='hour.value [newPost.meridiem]爲hour.name,小時爲小時「ng-model =」newPost.hour.value [newPost.meridiem]「'。這樣做的主要優點是'newPost.hour'現在是一個整數而不是一個對象,這使得預處理表單提交變得更容易。 – ACIDSTEALTH

+0

你能否提供一個關於你面臨什麼問題的蹲點,以便我可以試試? – Nayan