You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS中如何在select的ng-change中获取month.number值?

解决AngularJS中select的ng-change无法访问ng-repeat内month.number的问题

这个问题其实是AngularJS作用域的典型坑——month是ng-repeat="month in monthsList"创建的子作用域专属变量,而你的select处于父作用域,自然没法直接拿到它的值。给你两个最实用的解决办法:

方法一:把选中的月份存到父作用域变量

这是最直接的方案,核心就是把用户选中的月份同步到父作用域的全局变量里,让select能直接调用:

  1. 先在控制器里初始化一个存储当前选中月份的变量(可以默认选中第一个月份):
// 假设你的monthsList已经在$scope上,默认选中第一个月
$scope.selectedMonth = $scope.monthsList[0].number;
  1. 修改你的setActiveYear函数(说句题外话,这个函数名改成setActiveMonth会更贴切),把选中的月份号同步到全局变量:
$scope.setActiveYear = function(monthNumber) {
    // 保留你原来的激活状态判断逻辑
    $scope.selectedMonth = monthNumber; // 新增这行,把选中月份存到父作用域
};
  1. 最后更新select的ng-change,直接用这个全局变量:
<select ng-model="atndYearSelected" 
        ng-options="year for year in atnd_years|orderBy:'-year'" 
        ng-change="getAttendance(atndYearSelected, selectedMonth, infoList['0']['staff_id']);" 
        class="year">
</select>

方法二:利用现有激活状态函数同步月份

既然你已经有isActiveYear函数判断哪个月份处于激活状态,可以直接在这个函数里把激活的月份同步到父作用域:

$scope.isActiveYear = function(monthNumber) {
    // 保留你原来的激活判断逻辑,比如:
    var isActive = monthNumber === $scope.currentActiveMonth;
    // 如果当前月份是激活状态,就同步到父作用域变量
    if (isActive) {
        $scope.selectedMonth = monthNumber;
    }
    return isActive;
};

之后select的ng-change同样可以直接用selectedMonth变量,和方法一的最后一步一致。

补充:为什么你之前的ng-init无效?

你在<li>里用ng-init的话,变量还是被绑定在ng-repeat创建的子作用域里,父作用域的select根本访问不到,所以完全起不到作用——必须把变量放在父作用域才能实现跨组件的访问。

内容的提问来源于stack exchange,提问作者Yevgeniy Bagackiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:26:20