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

How to dynamically set default ng-options value

情况:我需要将默认的 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'}
]

但是,我需要动态设置默认值,这样明年我就不用再回来更改索引了。 我试图用 new Date().getFullYear() 替换 year_data[3] 但没有成功。此外,在控制器中,我尝试动态生成年份数据,但不确定如何在将年份数据的第一个条目保留到 2014 年的同时做到这一点。任何帮助将不胜感激!

如果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"