2017-06-13 62 views
0

情況:我需要將默認的ng-options值設置爲當前年份。我可以使用ng-init來設置它,並將數據數組中的當前年份數據分配給模型(請參閱下面的代碼)。 這裏是HTML:如何動態設置默認的ng-options值

<select 
    ng-model="year_filter" 
    ng-init="year_filter = year_data[3]" 
    ng-change="filter_years(year_filter); closeProject(); showEditVacay = false" 
    ng-options="year.name for year in year_data track by year.value" 
    > 
</select> 

在控制器,

$scope.year_data= [ 
    {value: '2014', name: '2014'}, 
    {value: '2015', name: '2015'}, 
    {value: '2016', name: '2016'}, 
    {value: '2017', name: '2017'}, 
    {value: '2018', name: '2018'}, 
    {value: '2019', name: '2019'} 
] 

不過,我需要動態設置的默認值,這樣我就不必明年再來和更改索引。 我試圖用new Date()。getFullYear()取代year_data [3],但沒有運氣。另外,在控制器中,我試圖動態生成年份數據,但不確定如何在保持年份數據的首次輸入至2014年的情況下如何執行此操作。任何幫助都將不勝感激!

+0

顯示控制器?你應該可以在你的'$ scope.year_data ...'代碼之後添加一些東西,比如'$ scope.year_filter = $ scope.year_data [3]'.... –

+0

@cale_b,沒有工作。 –

+0

@cale_b更具體地說,我已經嘗試過了,它可以很好地設置默認值。但是,它並未解決需要根據當年動態設置的問題。感謝您的輸入! –

回答

1

如果ng-model指向一個對象,則其對象引用必須等於選項數組中的一個對象。所以,你會通過year_data必須循環,並設置year_filter正確的對象:

var year = new Date().getFullYear().toString(); 

for (var i = 0; i < $scope.year_data.length; i++) { 
    if ($scope.year_data[i].value === year) { 
     $scope.year_filter = $scope.year_data[i]; 

     break; 
    } 
} 

如果你想避免一個循環來找到正確的對象引用,你可以有year_filter是字符串年:

$scope.year_filter = new Date().getFullYear().toString(); 

,並更改ng-options

ng-options="year.value as year.name for year in year_data" 
+0

getFullYear返回數字。如果year_data的值爲數字,那麼我們可以直接將year_filter設置爲新的Date()。getFullYear() – Sagar

+0

好點。相反,我編輯我的答案,以調用'new Date()。getFullYear()。toString();'以匹配選項中的'value'屬性(這是一個'string')。 –

+0

@FrankModica啊我怎麼沒有拿出這個!感謝它的工作。 –