如何动态设置默认ng-options值

时间:2017-06-13 14:32:08

标签: javascript angularjs ng-options

情况:我需要将默认的ng-options值设置为当前年份。我能够使用ng-init设置它并将当前年份数据从数据数组分配给模型(参见下面的代码)。 这是html:

<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'}
]

但是,我需要动态设置默认值,以便我不必在明年回来并更改索引。 我试图用新的Date()替换year_data [3] .getFullYear()但没有运气。此外,在控制器中,我尝试动态生成年份数据,但不知道如何保持年份数据的第一个条目到2014年。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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"