2017-06-13 11 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'} 
] 

はしかし、私は来年戻ってくると、インデックスを変更する必要がないように動的にデフォルト値を設定する必要があります。 year_data [3]を新しいDate()。getFullYear()に置き換えようとしましたが、運がなかった。また、コントローラでは、年のデータを動的に生成しようとしましたが、2014年の最初のデータを保持している間はそれを行う方法がわかりませんでした。どんな助けも大歓迎です!

+0

は、コントローラを表示しますか? '$ scope.year_filter = $ scope.year_data [3]' ....(既に$ {。scope_year_data ...}のコードの後に​​)追加することができるはずです。 –

+0

@cale_bうまくいかなかった。 –

+0

@cale_b具体的には、すでに試してみましたが、デフォルト値を設定するとうまくいきました。しかし、現在の年に基づいて動的に設定する必要がある問題は解決されませんでした。あなたのご意見ありがとうございます! –

答えて

1

ng-modelがオブジェクトを指す場合、そのオブジェクト参照は、オプションの配列内のオブジェクトの1つと等しくなければなりません。だから、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の値をnumberにすると、year_filterをnew Date()に直接設定できます。getFullYear() – Sagar

+0

良い点。代わりに、 'new Date()。getFullYear()。toString();'を呼び出してオプションの 'value'プロパティ(' string')とマッチングさせました。 –

+0

@FrankModicaああ、どうして私はこれを考え出すことができなかったでしょうか!ありがとうございます。 –

関連する問題